Redis服务配置的最佳实践

  • 配置Redis二级缓存
  • 启用Redis从属连接
  • 预加载键
  • 启用过时的缓存
  • 将Redis缓存与Redis会话分离
  • 压缩Redis缓存,并使用gzip以获得更高的压缩

配置Redis二级缓存

通过在.magento.env.yaml配置文件中设置REDIS_BACKEND部署变量来配置Redis二级缓存。

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)

二级缓存使用临时文件系统作为存储机制。 与专用键值数据库系统相比,临时文件系统没有控制内存使用的键逐出策略。

内存使用率控制不足会导致二级缓存内存使用率随着时间增长,因为它会累积过时的缓存。

为避免内存耗尽二级缓存实现,Adobe Commerce会在达到特定阈值时清除存储。 默认的阈值为95%。

根据项目对高速缓存存储的要求,调整二级高速缓存内存的最大使用率非常重要。 使用以下方法之一配置内存高速缓存大小:

  • 创建支持票证以请求/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高速缓存在阈值命中次数不多的情况下运行。
理想情况下,二级缓存内存的使用量应该稳定在低于阈值的某个级别,只是为了避免频繁的存储清除。

您可以使用以下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"

有关配置内部部署安装的信息,请参阅​ 配置指南 ​中的过时缓存选项

单独的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