Redis服務組態的最佳作法

  • 設定Redis L2快取
  • 啟用Redis從屬連線
  • 預先載入索引鍵
  • 啟用過時的快取
  • 將Redis快取與Redis工作階段分開
  • 壓縮Redis快取,並使用gzip進行較高的壓縮

設定Redis L2快取

.magento.env.yaml組態檔中設定REDIS_BACKEND部署變數,以設定Redis L2快取。

stage:
  deploy:
    REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'

如需雲端基礎結構上的環境設定,請參閱雲端基礎結構上的​ Commerce指南 ​中的REDIS_BACKEND

若為內部部署安裝,請參閱​ 設定指南 ​中的設定Redis頁面快取

NOTE
確認您使用的是最新版本的ece-tools封裝。 如果沒有,升級至最新版本。 您可以使用composer show magento/ece-tools CLI命令檢查本機環境中安裝的版本。

L2快取記憶體大小調整(Adobe Commerce Cloud)

L2快取使用暫存檔案系統做為儲存機制。 與專門化的索引鍵值資料庫系統相比,暫存檔案系統沒有控制記憶體使用的索引鍵逐出原則。

缺少記憶體使用量控制會累積過時的快取記憶體,導致L2快取記憶體使用量隨著時間增長。

為了避免L2快取記憶體耗盡,Adobe Commerce會在達到特定臨界值時清除儲存空間。 預設臨界值為95%。

請務必根據快取儲存裝置的專案需求,調整L2快取記憶體的最大使用量。 使用下列其中一種方法來設定記憶體快取大小:

  • 建立支援票證以要求/dev/shm掛載的大小變更。
  • 在應用程式層級調整cleanup_percentage屬性,以限制儲存的最大填充百分比。 剩餘的可用記憶體可供其他服務使用。
    您可以在快取組態群組cache/frontend/default/backend_options/cleanup_percentage下的部署組態中調整組態。
NOTE
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。

WARNING
請​_不_​為雲端基礎結構專案設定Redis從屬連線(使用縮放/分割架構)。 這會導致Redis連線錯誤。 請參閱​_雲端基礎結構上的Commerce_​指南中的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預先載入功能

啟用過時的快取

使用過時的快取記憶體,並同時產生新的快取記憶體,可減少鎖定等待時間,並提升效能(尤其是在處理大量區塊和快取記憶體金鑰時)。 啟用過時的快取並在.magento.env.yaml組態檔中定義快取型別:

stage:
  deploy:
    REDIS_BACKEND: '\Magento\Framework\Cache\Backend\RemoteSynchronizedCache'
    CACHE_CONFIGURATION:
      _merge: true
      default:
        backend_options:
          use_stale_cache: false
      stale_cache_enabled:
        backend_options:
          use_stale_cache: true
      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"
NOTE
在上一個範例中,full_page快取與雲端基礎結構專案上的Adobe Commerce無關,因為它們使用Fastly

若要設定內部部署安裝,請參閱​ 設定指南 ​中的過時快取選項

單獨的Redis快取和工作階段例項

將Redis快取與Redis工作階段分開可讓您分別管理快取與工作階段。 它可防止快取問題影響工作階段,進而影響收入。 每個Redis執行個體都以自己的核心執行,可改善效能。

  1. 更新.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
    
  2. 更新.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"
    
  3. 提交Adobe Commerce支援票證,以請求布建專用於生產和中繼環境工作階段的新Redis執行個體。 包含更新的.magento/services.yaml.magento.app.yaml組態檔。 這不會造成任何停機時間,但需要部署才能啟用新服務。

  4. 確認新執行個體正在執行,並記下連線埠號碼。

    code language-bash
    echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
    
  5. 將連線埠號碼新增至.magento.env.yaml設定檔。

    note note
    NOTE
    disable_locking必須設定為1
    code language-yaml
    SESSION_CONFIGURATION:
      _merge: true
      redis:
        port: 6374       # check the port in $MAGENTO_CLOUD_RELATIONSHIPS
        timeout: 5
        disable_locking: 1
        bot_first_lifetime: 60
        bot_lifetime: 7200
        max_lifetime: 2592000
        min_lifetime: 60
    
  6. 從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%)

其他資訊

recommendation-more-help
754cbbf3-3a3c-4af3-b6ce-9d34390f3a60