[內部部署]{class="badge informative" title="僅適用於Adobe Commerce內部部署專案。"}

為預設和頁面快取設定Redis

NOTE
若為雲端專案上的Adobe Commerce,請參閱Redis與Valkey服務組態的最佳實務以取得快取組態指示。 Adobe Commerce 2.4.9或更新於2.4.5-p16、2.4.6-p14、2.4.7-p9和2.4.8-p5的修補程式版本不支援Redis快取。 對於不支援Redis的快取設定,請使用Valkey。 如需依版本支援的快取服務,請參閱系統需求

Commerce提供命令列選項來設定Redis頁面和預設快取。 雖然您可以透過編輯<Commerce-install-dir>app/etc/env.php檔案來設定快取,但建議使用命令列的方法,尤其是對於初始設定。 命令列會提供驗證,確保組態語法正確。

先決條件:

安裝Redis,然後再繼續。

NOTE
對於在EC2上託管的Commerce執行個體,您可以使用AWS ElastiCache來取代本機Redis執行個體。 請參閱為EC2執行個體設定Elasticache

Redis快取實作

Adobe Commerce已使用這些Redis快取後端實作:

  • 舊版Redis後端 (Cm_Cache_Backend_Redis) — 在舊版Redis設定中使用的已棄用實作。
  • Redis後端 (Magento\Framework\Cache\Backend\Redis) — 此主題中命令列組態用於預設和頁面快取的後端。
  • L2快取後端 (Magento\Framework\Cache\Backend\RemoteSynchronizedCache) — 使用Redis做為遠端後端和本機檔案快取儲存體的兩級快取實作,以跨節點同步處理快取資料。 請參閱兩級快取組態

設定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-server
伺服器
完整的主機名稱、IP位址或UNIX通訊端的絕對路徑。 預設值127.0.0.1表示Commerce伺服器上已安裝Redis。
127.0.0.1
cache-backend-redis-port
連線埠
Redis伺服器接聽連線埠
6379
cache-backend-redis-db
資料庫
如果您對預設和全頁快取都使用Redis,則此為必要專案。 指定其中一個快取的資料庫編號;另一個快取預設使用0。

重要事項:如果您對多種型別的快取使用Redis,則資料庫編號必須不同。 建議您將預設快取資料庫編號指派為0,將頁面快取資料庫編號指派為1,並將工作階段儲存資料庫編號指派為2。
0
cache-backend-redis-password
密碼
設定Redis密碼可啟用其中一項內建的安全性功能: auth命令,它要求使用者端驗證以存取資料庫。 密碼是直接在Redis的組態檔中設定: /etc/redis/redis.conf
cache-backend-redis-compress-data
compress_data
設定為0以停用壓縮。
1
cache-backend-redis-compression-lib
compression_lib
要使用的壓縮程式庫。 支援的值包括snappylzfl4zzstdgzip。 留空以自動決定。
cache-backend-redis-use-lua
use_lua
啟用或停用所有Redis作業的Lua指令碼。

預設:保留在0. Lua模式預設為停用,以防止在啟用Lua時,隨附的Redis程式庫(1.17.x)出現的已知效能回歸和GraphQL快取遺漏問題。
0
cache-backend-redis-use-lua-on-gc
use_lua_on_gc
啟用或停用記憶體回收的Lua指令碼(backend_clean_cache cron工作)。

預設:保留在1. 刻意啟用,以確保在GC期間進行原子標籤設定清理。 若沒有它,當backend_clean_cache cron與快取儲存作業同時執行時,可能會發生競爭條件,使快取專案在快取標籤索引中沒有對應的記錄。 這會導致標籤式失效自動失敗 — 例如,更新產品價格可能不會使產品快取失效,而是需要完整的快取排清。
1

Lua模式

啟用時,Lua模式會將多個Redis作業(快取寫入、標籤更新、記憶體回收)整合到透過EVALSHA在伺服器端執行的單一Atomic指令碼。 這可防止並行請求中的交錯,例如,確保將快取專案及其標籤成員資格一起寫入。

WARNING
不瞭解Adobe Commerce版本的影響,請勿變更use_luause_lua_on_gc的預設值:
  • use_lua:在Adobe Commerce 2.4.7或2.4.8 (資料庫colinmollenhour/cache-backend-redis 1.17.1)上啟用此專案可能會導致快取損毀,以及GraphQL快取遺漏問題。
  • use_lua_on_gc:在Adobe Commerce 2.4.8上停用此專案會移除廢棄專案收集期間的原子保護,而且可能導致標籤式快取失效無訊息地失敗,需要完整快取排清才能復原。

命令範例(預設快取)

下列範例會啟用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-server
伺服器
完整的主機名稱、IP位址或UNIX通訊端的絕對路徑。 預設值127.0.0.1表示Commerce伺服器上已安裝Redis。
127.0.0.1
page-cache-redis-port
連線埠
Redis伺服器接聽連線埠
6379
page-cache-redis-db
資料庫
如果您對預設和完整頁面快取都使用Redis,則此為必要專案。 指定其中一個快取的資料庫編號;另一個快取預設使用0。
重要事項:如果您對多種型別的快取使用Redis,則資料庫編號必須不同。 建議您將預設快取資料庫編號指派為0,將頁面快取資料庫編號指派為1,並將工作階段儲存資料庫編號指派為2。
0
page-cache-redis-password
密碼
設定Redis密碼可啟用其中一項內建的安全性功能: auth命令,它要求使用者端驗證以存取資料庫。 在Redis組態檔中設定密碼: /etc/redis/redis.conf
page-cache-redis-compress-data
compress_data
設定為1以壓縮整頁快取。 使用0停用壓縮。
0
page-cache-redis-compression-lib
compression_lib
要使用的壓縮程式庫。 支援的值包括snappylzfl4zzstdgzip。 留空以自動決定。

下列範例會啟用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
NOTE
從Adobe Commerce 2.4.9開始,Valkey正式取代CLI工具中的Redis。 對於​版本2.4.8和更早版本,請使用等同的Redis CLI命令

檢閱Commerce環境設定

執行命令設定Redis快取更新Commerce環境設定(<Commerce-install-dir>app/etc/env.php):

'cache' => [
    'frontend' => [
        'default' => [
            'backend' => 'Magento\\Framework\\Cache\\Backend\\Redis',
            'backend_options' => [
                'server' => '127.0.0.1',
                'database' => '0',
                'port' => '6379'
            ],
        ],
        'page_cache' => [
            'backend' => 'Magento\\Framework\\Cache\\Backend\\Redis',
            'backend_options' => [
                'server' => '127.0.0.1',
                'port' => '6379',
                'database' => '1',
                'compress_data' => '0'
            ]
        ]
    ]
],

設定其他快取選項

Redis預先載入功能

由於Commerce會將設定資料儲存在Redis快取中,因此您可以預先載入在不同頁面之間重複使用的資料。 若要尋找必須預先載入的金鑰,請分析從Redis傳輸到Commerce的資料。 Adobe建議預先載入每個頁面上載入的資料,例如SYSTEM_DEFAULTEAV_ENTITY_TYPESDB_IS_UP_TO_DATE

Redis使用pipeline來複合載入要求。 金鑰應包含資料庫首碼;例如,如果資料庫首碼為061_,則預先載入金鑰會如下所示: 061_SYSTEM_DEFAULT

'cache' => [
    'frontend' => [
        'default' => [
            'id_prefix' => '061_',
            'backend' => 'Magento\\Framework\\Cache\\Backend\\Redis',
            'backend_options' => [
                'server' => 'redis',
                'database' => '0',
                'port' => '6379',
                'password' => '',
                'compress_data' => '1',
                'compression_lib' => '',
                'preload_keys' => [
                    '061_EAV_ENTITY_TYPES',
                    '061_GLOBAL_PLUGIN_LIST',
                    '061_DB_IS_UP_TO_DATE',
                    '061_SYSTEM_DEFAULT',
                ],
            ]
        ],
        'page_cache' => [
            'id_prefix' => '061_'
        ]
    ]
]

搭配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

    'cache' => [
        'frontend' => [
            'default' => [
                'id_prefix' => 'b0b_',
                'backend' => 'Magento\\Framework\\Cache\\Backend\\Redis',
                'backend_options' => [
                    'server' => 'redis',
                    'database' => '0',
                    'port' => '6379',
                    'password' => '',
                    'compress_data' => '1',
                    'compression_lib' => ''
                ]
            ],
            'page_cache' => [
                'id_prefix' => 'b0b_'
            ]
        ],
        'allow_parallel_generation' => false
    ],

PHP Redis擴充功能

當您的環境支援原生PHP Redis擴充功能(phpredis)時,請使用該擴充功能:

使用apt

對於Debian或Ubuntu,請使用apt

sudo apt-get install php-redis
sudo systemctl restart php-fpm
php -m | grep redis

使用pecl

作為替代方法,請使用pecl

sudo pecl install redis
echo "extension=redis.so" | sudo tee /etc/php/<version>/mods-available/redis.ini
sudo phpenmod redis
sudo systemctl restart php-fpm
php -m | grep redis

驗證Redis連線

若要確認Redis和Commerce可正常搭配運作:

  1. 登入執行Redis和Commerce的伺服器。
  2. 開啟終端機。
  3. 使用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工作階段資料。

recommendation-more-help
commerce-operations-help-configuration