為預設和頁面快取設定Redis
Commerce提供命令列選項來設定Redis頁面和預設快取。 雖然您可以編輯<Commerce-install-dir>app/etc/env.php檔案來設定快取,但建議使用命令列的方法,尤其是對於初始設定。 命令列會提供驗證,以確保組態語法正確。
先決條件:
安裝Redis,然後再繼續。
支援的框架
-
Zend快取(2.4.8和更早版本) — Commerce 2.4.8和更早版本的舊版Redis後端:
- 舊版Redis後端 — 使用完整類別路徑(
Magento\Framework\Cache\Backend\Redis) - 預先載入金鑰 — 支援預先載入常用的快取金鑰
- Lua指令碼 — 記憶體回收的Lua
- 壓縮 — 支援資料壓縮
- 舊版Redis後端 — 使用完整類別路徑(
-
Symfony快取(2.4.9+) — 從Commerce 2.4.9開始,Symfony快取為Redis提供符合PSR 6規範的現代化快取實作,並大幅改善效能:
- 自動Redis流水線 — 將多個作業批次化為單一請求,減少延遲
- PSR-6 TagAwareAdapter — 利用原子作業有效率地讓標籤式快取失效
- Igbinary序列化 — 二進位序列化將快取專案大小減少45%,並將速度提高5-10%
- 增強型持續連線 — 更穩定的連線集區,以及更妥善的處理分叉的處理程式
- 最佳化的Lua指令碼 — 伺服器端執行結合流水線以發揮最大效率
設定Redis預設快取
執行setup:config:set命令並指定Redis預設快取專用的引數。
bin/magento setup:config:set --cache-backend=redis --cache-backend-redis-<parameter>=<value>...
,並使用下列引數:
-
--cache-backend=redis啟用Redis預設快取。 如果已啟用此功能,請省略此引數。 -
--cache-backend-redis-<parameter>=<value>是設定預設快取的機碼和值組清單:
cache-backend-redis-server127.0.0.1cache-backend-redis-port6379cache-backend-redis-db重要事項:如果您對多種型別的快取使用Redis,則資料庫編號必須不同。 建議您將預設快取資料庫編號指派為0,將頁面快取資料庫編號指派為1,並將工作階段儲存資料庫編號指派為2。
0cache-backend-redis-passwordauth命令,它要求使用者端驗證以存取資料庫。 密碼是直接在Redis的組態檔中設定: /etc/redis/redis.confcache-backend-redis-use-luaLua: Lua可執行Redis內的部分應用程式邏輯,藉由原子執行來改善效能並確保資料的一致性。
0cache-backend-redis-use-lua-on-gcLua: Lua可執行Redis內的部分應用程式邏輯,藉由原子執行來改善效能並確保資料的一致性。
1命令範例(預設快取)
下列範例會啟用Redis預設快取,將主機設定為127.0.0.1,並將資料庫編號指派為0。 Redis會針對所有其他引數使用預設值。
bin/magento setup:config:set --cache-backend=redis --cache-backend-redis-server=127.0.0.1 --cache-backend-redis-db=0
設定Redis頁面快取
若要在Commerce上設定Redis頁面快取,請使用其他引數執行setup:config:set命令。
bin/magento setup:config:set --page-cache=redis --page-cache-redis-<parameter>=<value>...
,並使用下列引數:
-
--page-cache=redis啟用Redis頁面快取。 如果已啟用此功能,請省略此引數。 -
--page-cache-redis-<parameter>=<value>是設定頁面快取的機碼和值組清單:
page-cache-redis-server127.0.0.1page-cache-redis-port6379page-cache-redis-db重要事項:如果您對多種型別的快取使用Redis,則資料庫編號必須不同。 建議您將預設快取資料庫編號指派為0,將頁面快取資料庫編號指派為1,並將工作階段儲存資料庫編號指派為2。
0page-cache-redis-passwordauth命令,它要求使用者端驗證以存取資料庫。 在Redis組態檔中設定密碼: /etc/redis/redis.conf下列範例會啟用Redis頁面快取,將主機設定為127.0.0.1,並將資料庫編號指派給1。 所有其他引數都會設定為預設值。
bin/magento setup:config:set --page-cache=redis --page-cache-redis-server=127.0.0.1 --page-cache-redis-db=1
檢閱Commerce環境設定
執行命令設定Redis快取更新Commerce環境設定(<Commerce-install-dir>app/etc/env.php):
| code language-php |
|---|
|
| code language-php |
|---|
|
| note |
|---|
| NOTE |
從Commerce 2.4.9開始,請使用簡化的後端型別'backend' => 'redis',而非完整的類別路徑。 指定簡化名稱時,會自動使用Symfony快取。 |
設定其他快取選項
Redis預先載入功能
由於Commerce會將設定資料儲存在Redis快取中,因此您可以預先載入在不同頁面之間重複使用的資料。 若要尋找必須預先載入的金鑰,請分析從Redis傳輸到Commerce的資料。 Adobe建議預先載入每個頁面上載入的資料,例如SYSTEM_DEFAULT、EAV_ENTITY_TYPES和DB_IS_UP_TO_DATE。
Redis使用pipeline來複合載入要求。 金鑰應包含資料庫首碼;例如,如果資料庫首碼為061_,則預先載入金鑰會如下所示: 061_SYSTEM_DEFAULT
| code language-php |
|---|
|
| code language-php |
|---|
|
搭配L2快取使用預先載入功能時,您必須將:hash尾碼新增至您的金鑰。 L2快取只會傳輸資料的雜湊,不會傳輸實際資料。
'preload_keys' => [
'061_EAV_ENTITY_TYPES:hash',
'061_GLOBAL_PLUGIN_LIST:hash',
'061_DB_IS_UP_TO_DATE:hash',
'061_SYSTEM_DEFAULT:hash',
],
平行產生
從Commerce 2.4.0版開始,Adobe為想要消除等待鎖定的使用者引入了allow_parallel_generation選項。 預設會停用,Adobe建議您在設定和/或區塊數量過多前將其停用。
若要啟用平行產生:
bin/magento setup:config:set --allow-parallel-generation
由於它是標幟,因此您無法使用命令將其停用。 手動將設定值設為false:
| code language-php |
|---|
|
| code language-php |
|---|
|
Symfony快取效能最佳化
如果您使用Symfony快取,您可以透過設定Igbinary序列化程式、安裝igbinary PHP擴充功能和phpredis擴充功能,以及啟用持續連線來進一步最佳化效能。
Igbinary序列化程式
Igbinary序列化程式比PHP的預設序列化提供顯著的效能改善。 必須在app/etc/env.php中手動設定:
'cache' => [
'frontend' => [
'default' => [
'backend_options' => [
'server' => 'redis',
'database' => '0',
'port' => '6379',
'serializer' => 'igbinary', // Enable Igbinary serialization
]
],
'page_cache' => [
'backend_options' => [
'server' => 'redis',
'database' => '1',
'port' => '6379',
'serializer' => 'igbinary', // Enable Igbinary for page cache too
]
]
]
]
安裝PHP Igbinary擴充功能
若要使用igbinary序列化,您必須安裝PHP Igbinary延伸模組。
使用apt (建議用於Debian/Ubuntu):
sudo apt-get install php-igbinary
sudo systemctl restart php-fpm
php -m | grep igbinary
使用pecl (替代方法):
sudo pecl install igbinary
echo "extension=igbinary.so" | sudo tee /etc/php/8.3/mods-available/igbinary.ini
sudo phpenmod igbinary
sudo systemctl restart php-fpm
php -m | grep igbinary
PHP Redis擴充功能:phpredis與Predis的比較
Commerce 2.4.9+包含在phpredis (原生C擴充功能)和Predis (純PHP程式庫)之間的自動遞補。 為獲得最佳效能,請安裝phpredis:
使用apt (建議用於Debian/Ubuntu):
sudo apt-get install php-redis
sudo systemctl restart php-fpm
php -m | grep redis
使用pecl (替代方法):
sudo pecl install redis
echo "extension=redis.so" | sudo tee /etc/php/8.3/mods-available/redis.ini
sudo phpenmod redis
sudo systemctl restart php-fpm
php -m | grep redis
效能比較:
持續連線
持續連線會重複使用各個請求中的現有Redis連線,快取作業速度可提升5-15%。 在app/etc/env.php中設定:
'cache' => [
'frontend' => [
'default' => [
'backend_options' => [
'server' => 'redis',
'database' => '0',
'port' => '6379',
'persistent' => '1',
'persistent_id' => 'cache_default',
'timeout' => '2.5',
'read_timeout' => '2.0',
]
],
'page_cache' => [
'backend_options' => [
'server' => 'redis',
'database' => '1',
'port' => '6379',
'persistent' => '1',
'persistent_id' => 'cache_fpc',
]
]
]
]
persistent_id來避免連線衝突。完成最佳化的設定
以下是生產就緒的Symfony組態,結合所有效能最佳化:
'cache' => [
'frontend' => [
'default' => [
'id_prefix' => 'b0b_',
'backend' => 'redis',
'backend_options' => [
'server' => 'redis',
'database' => '0',
'port' => '6379',
'serializer' => 'igbinary',
'compress_data' => '1',
'compression_lib' => 'gzip',
'persistent' => '1',
'persistent_id' => 'cache_default',
'timeout' => '2.5',
'read_timeout' => '2.0',
'use_lua' => '1',
'use_lua_on_gc' => '1',
'preload_keys' => [
'b0b_EAV_ENTITY_TYPES',
'b0b_GLOBAL_PLUGIN_LIST',
'b0b_DB_IS_UP_TO_DATE',
'b0b_SYSTEM_DEFAULT',
],
]
],
'page_cache' => [
'id_prefix' => 'b0b_',
'backend' => 'redis',
'backend_options' => [
'server' => 'redis',
'database' => '1',
'port' => '6379',
'serializer' => 'igbinary',
'compress_data' => '0',
'persistent' => '1',
'persistent_id' => 'cache_fpc',
]
]
],
'allow_parallel_generation' => false
]
驗證Redis連線
若要確認Redis和Commerce可正常搭配運作:
- 登入執行Redis和Commerce的伺服器。
- 開啟終端機。
- 使用
redis-cli monitor命令或redis-cli ping命令檢查連線。
如果命令成功,則Redis正在執行,並且可以與Commerce應用程式通訊。 如果失敗,則Redis與Commerce之間存在您需要解決的連線問題。
Redis監視命令
redis-cli monitor
頁面快取輸出範例:
1476826133.810090 [0 127.0.0.1:52366] "select" "1"
1476826133.816293 [0 127.0.0.1:52367] "select" "0"
1476826133.817461 [0 127.0.0.1:52367] "hget" "zc:k:ea6_GLOBAL__DICONFIG" "d"
1476826133.829666 [0 127.0.0.1:52367] "hget" "zc:k:ea6_DICONFIG049005964B465901F774DB9751971818" "d"
1476826133.837854 [0 127.0.0.1:52367] "hget" "zc:k:ea6_INTERCEPTION" "d"
1476826133.868374 [0 127.0.0.1:52368] "select" "1"
1476826133.869011 [0 127.0.0.1:52369] "select" "0"
1476826133.869601 [0 127.0.0.1:52369] "hget" "zc:k:ea6_DEFAULT_CONFIG_CACHE_DEFAULT__10__235__32__1080MAGENTO2" "d"
1476826133.872317 [0 127.0.0.1:52369] "hget" "zc:k:ea6_INITIAL_CONFIG" "d"
1476826133.879267 [0 127.0.0.1:52369] "hget" "zc:k:ea6_GLOBAL_PRIMARY_PLUGIN_LIST" "d"
...
如果兩個指令都成功,Redis就會正確設定。
檢查壓縮資料
若要檢查壓縮的工作階段資料和頁面快取,請使用RESP.app工具。 它支援自動解壓縮Commerce 2工作階段和頁面快取資料,並以可讀取的格式顯示PHP工作階段資料。