[僅限PaaS]{class="badge informative" title="僅適用於雲端專案(Adobe管理的PaaS基礎結構)和內部部署專案的Adobe Commerce 。"}
Redis服務組態的最佳作法
- 設定Redis L2快取
- 啟用Redis從屬連線
- 預先載入索引鍵
- 啟用過時的快取
- 將Redis快取與Redis工作階段分開
- 壓縮Redis快取,並使用
gzip
進行較高的壓縮
設定Redis L2快取
在REDIS_BACKEND
組態檔中設定.magento.env.yaml
部署變數,以設定Redis L2快取。
stage:
deploy:
REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
如需雲端基礎結構上的環境設定,請參閱雲端基礎結構上的REDIS_BACKEND
Commerce指南中的__。
若為內部部署安裝,請參閱設定指南中的 設定Redis頁面快取。
L2快取記憶體大小(Adobe Commerce Cloud)
L2快取使用暫存檔案系統做為儲存機制。 與專門化的索引鍵值資料庫系統相比,暫存檔案系統沒有控制記憶體使用的索引鍵逐出原則。
缺少記憶體使用量控制會累積過時的快取記憶體,導致L2快取記憶體使用量隨著時間增長。
為了避免L2快取記憶體耗盡,Adobe Commerce會在達到特定臨界值時清除儲存空間。 預設臨界值為95%。
請務必根據快取儲存裝置的專案需求,調整L2快取記憶體的最大使用量。 使用下列其中一種方法來設定記憶體快取大小:
- 建立支援票證以要求
/dev/shm
掛載的大小變更。 - 在應用程式層級調整
cleanup_percentage
屬性,以限制儲存的最大填充百分比。 剩餘的可用記憶體可供其他服務使用。
您可以在快取組態群組cache/frontend/default/backend_options/cleanup_percentage
下的部署組態中調整組態。
cleanup_percentage
可設定的選項已在Adobe Commerce 2.4.4中匯入。下列程式碼顯示.magento.env.yaml
檔案中的設定範例:
stage:
deploy:
REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
CACHE_CONFIGURATION:
_merge: true
frontend:
default:
backend_options:
cleanup_percentage: 90
快取需求可能會因專案設定和自訂第三方程式碼而異。 L2快取記憶體大小調整範圍可讓L2快取記憶體在不發生太多臨界值點選的情況下運作。
理想情況下,L2快取記憶體的使用量應該穩定在低於臨界值的特定層級,以避免頻繁的儲存清除。
您可以使用下列CLI命令來檢查叢集每個節點上的L2快取儲存記憶體使用量,並尋找/dev/shm
行。
使用方式可能因不同節點而異,但應會收斂至相同值。
df -h
啟用Redis從屬連線
啟用.magento.env.yaml
組態檔中的Redis從屬連線,只允許一個節點處理讀寫流量,而其他節點則處理唯讀流量。
stage:
deploy:
REDIS_USE_SLAVE_CONNECTION: true
請參閱雲端基礎結構指南上的Commerce中的 REDIS_USE_SLAVE_CONNECTION。
針對Adobe Commerce內部部署安裝,請使用bin/magento:setup
命令設定新的Redis快取實作。 請參閱組態指南中的 使用預設快取 的Redis。
預先載入索引鍵
若要在頁面之間重複使用資料,請在.magento.env.yaml
組態檔中列出預先載入的金鑰。
stage:
deploy:
REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
CACHE_CONFIGURATION:
_merge: true
frontend:
default:
id_prefix: '061_' # Prefix for keys to be preloaded
backend_options:
preload_keys: # List the keys to be preloaded
- '061_EAV_ENTITY_TYPES:hash'
- '061_GLOBAL_PLUGIN_LIST:hash'
- '061_DB_IS_UP_TO_DATE:hash'
- '061_SYSTEM_DEFAULT:hash'
如需內部部署安裝,請參閱設定指南中的 Redis預先載入功能。
啟用過時的快取
使用過時的快取記憶體,並同時產生新的快取記憶體,可減少鎖定等待時間,並提升效能(尤其是在處理大量區塊和快取記憶體金鑰時)。 啟用過時的快取並在config.php
設定檔案中定義快取型別(僅限雲端):
'cache' => [
'frontend' => [
'stale_cache_enabled' => [
'backend' => '\\Magento\\Framework\\Cache\\Backend\\RemoteSynchronizedCache',
'backend_options' => [
'remote_backend' => '\\Magento\\Framework\\Cache\\Backend\\Redis',
'remote_backend_options' => [
'persistent' => 0,
'server' => 'localhost',
'database' => '4',
'port' => '6370',
'password' => ''
],
'local_backend' => 'Cm_Cache_Backend_File',
'local_backend_options' => [
'cache_dir' => '/dev/shm/'
],
'use_stale_cache' => true,
],
'frontend_options' => [
'write_control' => false,
],
]
],
'type' => [
'default' => ['frontend' => 'default'],
'layout' => ['frontend' => 'stale_cache_enabled'],
'block_html' => ['frontend' => 'stale_cache_enabled'],
'reflection' => ['frontend' => 'stale_cache_enabled'],
'config_integration' => ['frontend' => 'stale_cache_enabled'],
'config_integration_api' => ['frontend' => 'stale_cache_enabled'],
'full_page' => ['frontend' => 'stale_cache_enabled'],
'translate' => ['frontend' => 'stale_cache_enabled']
],
]
full_page
快取與雲端基礎結構專案上的Adobe Commerce無關,因為它們使用Fastly。若要設定內部部署安裝,請參閱設定指南中的 過時快取選項。
單獨的Redis快取和工作階段例項
將Redis快取與Redis工作階段分開可讓您分別管理快取與工作階段。 它可防止快取問題影響工作階段,進而影響收入。 每個Redis執行個體都以自己的核心執行,可改善效能。
-
更新
.magento/services.yaml
設定檔。code language-yaml mysql: type: mysql:10.4 disk: 35000 redis: type: redis:6.0 redis-session: # This is for the new Redis instance type: redis:6.0 search: type: elasticsearch:7.9 disk: 5000 rabbitmq: type: rabbitmq:3.8 disk: 2048
-
更新
.magento.app.yaml
設定檔。code language-yaml relationships: database: "mysql:mysql" redis: "redis:redis" redis-session: "redis-session:redis" # Relationship of the new Redis instance search: "search:elasticsearch" rabbitmq: "rabbitmq:rabbitmq"
-
提交Adobe Commerce支援票證,以請求布建專用於生產和中繼環境工作階段的新Redis執行個體。 包含更新的
.magento/services.yaml
與.magento.app.yaml
組態檔。 這不會造成任何停機時間,但需要部署才能啟用新服務。 -
確認新執行個體正在執行,並記下連線埠號碼。
code language-bash echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
-
將連線埠號碼新增至
.magento.env.yaml
設定檔。note important IMPORTANT 只有在 ece-tools
無法從MAGENTO_CLOUD_RELATIONSHIPS
redis工作階段服務定義自動偵測到它時,才設定redis工作階段連線埠。note note NOTE disable_locking
必須設定為1
。code language-yaml SESSION_CONFIGURATION: _merge: true redis: timeout: 5 disable_locking: 1 bot_first_lifetime: 60 bot_lifetime: 7200 max_lifetime: 2592000 min_lifetime: 60
-
從Redis快取執行個體上的預設資料庫 (
db 0
)移除工作階段。code language-bash redis-cli -h 127.0.0.1 -p 6374 -n 0 FLUSHDB
部署期間,您應該會在建置和部署記錄檔中看到下列行:
W: - Downloading colinmollenhour/credis (1.11.1)
W: - Downloading colinmollenhour/php-redis-session-abstract (v1.4.5)
...
W: - Installing colinmollenhour/credis (1.11.1): Extracting archive
W: - Installing colinmollenhour/php-redis-session-abstract (v1.4.5): Extracting archive
...
[2022-08-17 01:13:40] INFO: Version of service 'redis' is 6.0
[2022-08-17 01:13:40] INFO: Version of service 'redis-session' is 6.0
[2022-08-17 01:13:40] INFO: redis-session will be used for session if it was not override by SESSION_CONFIGURATION
快取壓縮
如果您使用超過6GB的Redis maxmemory
,則可以使用快取壓縮來減少金鑰使用的空間。 請注意,使用者端效能是有代價的。 如果您有備用CPU,請啟用它。 請參閱組態指南中的 使用工作階段存放區 的Redis。
stage:
deploy:
REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
CACHE_CONFIGURATION:
_merge: true;
frontend:
default:
backend_options:
compress_data: 4 # 0-9
compress_tags: 4 # 0-9
compress_threshold: 20480 # don't compress files smaller than this value
compression_lib: 'gzip' # snappy and lzf for performance, gzip for high compression (~69%)
啟用Redis非同步釋放(lazyfree)
若要在雲端基礎結構上的Adobe Commerce上啟用lazyfree
,請提交Adobe Commerce支援票證,要求將下列Redis設定套用至您的環境:
lazyfree-lazy-eviction yes
lazyfree-lazy-expire yes
lazyfree-lazy-server-del yes
replica-lazy-flush yes
lazyfree-lazy-user-del yes
啟用lazyfree時,Redis會將記憶體回收解除安裝到背景執行緒,以進行搬遷、過期、伺服器啟動的刪除、使用者刪除和復本資料集清除。 這減少了主執行緒封鎖,並可減少請求延遲。
lazyfree-lazy-user-del yes
選項會使DEL
命令的行為類似UNLINK
,立即解除金鑰的連結,並非同步地釋放其記憶體。啟用Redis多執行緒I/O
若要在雲端基礎結構上的Adobe Commerce上啟用Redis I/O執行緒,請提交Adobe Commerce支援票證以請求下列設定。 這可以藉由從主執行緒解除安裝通訊端讀取/寫入和命令剖析來改善輸送量,但代價是需要增加的CPU使用量。 在載入下驗證並監視主機。
io-threads-do-reads yes
io-threads 8 # choose a value lower than the number of CPU cores (check with nproc), then tune under load
io-threads
或停用I/O執行緒中的讀取。增加Redis使用者端逾時和重試次數
調整.magento.env.yaml
中的後端選項,將快取使用者端的容許度提升為暫時性飽和度:
stage:
deploy:
CACHE_CONFIGURATION:
_merge: true
frontend:
default:
backend_options:
read_timeout: 10
connect_retries: 5
這些設定會延長回覆等待視窗並重試連線設定,以增加使用者端對Redis短暫阻塞的容許度。 這可以減少在短期尖峰期間發生間歇性cannot connect to localhost:6370
和讀取逾時錯誤。