[仅限PaaS]{class="badge informative" title="仅适用于云项目(Adobe管理的PaaS基础架构)和内部部署项目上的Adobe Commerce 。"}
为默认缓存和页面缓存配置Valkey
Commerce提供了命令行选项来配置Valkey默认值和页面缓存。 虽然可以通过编辑<Commerce-install-dir>app/etc/env.php文件来配置缓存,但建议使用命令行来配置缓存,尤其是对于初始配置。 命令行提供验证,确保配置语法正确。
先决条件:
先安装Valkey,然后再继续。
支持的框架
-
Zend缓存(2.4.8及更早版本) — Commerce 2.4.8及更早版本的旧版Valkey后端:
- 旧版Valkey后端 — 使用完整的类路径(
Magento\Framework\Cache\Backend\Valkey) - 预加载密钥 — 支持预加载常用的缓存密钥
- Lua脚本 — 用于垃圾回收的Lua
- 压缩 — 支持数据压缩
- 旧版Valkey后端 — 使用完整的类路径(
-
Symfony缓存(2.4.9+) — 从Commerce 2.4.9开始,Symfony缓存为Valkey提供了一个符合PSR 6的现代化缓存实现,并显着提高了性能:
- 自动Valkey流水线 — 将多个操作批处理为单个请求,减少延迟
- PSR-6 TagAwareAdapter — 利用原子操作使基于标记的缓存有效失效
- Igbinary序列化 — 二进制序列化将缓存条目大小减少45%,速度提高5-10%
- 增强的持久连接 — 连接池更稳定,分叉进程处理更好
- 优化的Lua脚本 — 服务器端执行与流水线结合使用以实现最高效率
配置Valkey默认缓存
运行setup:config:set命令并指定Valkey默认缓存的参数。
bin/magento setup:config:set --cache-backend=valkey --cache-backend-valkey-<parameter>=<value>...
-
--cache-backend=valkey启用Valkey默认缓存。 如果已启用此功能,请忽略此参数。 -
--cache-backend-valkey-<parameter>=<value>是配置默认缓存的键值对列表:
cache-backend-valkey-server127.0.0.1表示Commerce服务器上安装了Valkey。127.0.0.1cache-backend-valkey-port6379cache-backend-valkey-db0。重要信息:如果对多种类型的缓存使用Valkey,则数据库编号必须不同。 Adobe建议将默认缓存数据库编号分配给
0,将页面缓存数据库编号分配给1,将会话存储数据库编号分配给2。0cache-backend-valkey-passwordauth命令,该命令要求客户端进行身份验证以访问数据库。 密码直接在Valkey的配置文件中配置: /etc/valkey/valkey.confcache-backend-valkey-use-luaLUA: Lua使我们能够在Valkey中运行部分应用程序逻辑,从而改善性能并通过其原子执行确保数据一致性。
0cache-backend-valkey-use-lua-on-gcLUA: Lua使我们能够在Valkey中运行部分应用程序逻辑,从而改善性能并通过其原子执行确保数据一致性。
1示例命令(默认缓存)
以下示例启用Valkey默认缓存,将主机设置为127.0.0.1,并将数据库编号分配给0。 Valkey对所有其他参数使用默认值。
bin/magento setup:config:set --cache-backend=valkey --cache-backend-valkey-server=127.0.0.1 --cache-backend-valkey-db=0
配置Valkey页面缓存
要在Commerce上配置Valkey页缓存,请使用其他参数运行setup:config:set命令。
bin/magento setup:config:set --page-cache=valkey --page-cache-valkey-<parameter>=<value>...
并使用以下参数:
-
--page-cache=valkey启用Valkey页缓存。 如果已启用此功能,请忽略此参数。 -
--page-cache-valkey-<parameter>=<value>是配置页面缓存的键值对列表:
page-cache-valkey-server127.0.0.1表示Commerce服务器上安装了Valkey。127.0.0.1page-cache-valkey-port6379page-cache-valkey-db0。重要信息:如果对多种类型的缓存使用Valkey,则数据库编号必须不同。 建议将默认缓存数据库编号分配给
0,将页面缓存数据库编号分配给1,将会话存储数据库编号分配给2。0page-cache-valkey-passwordauth命令,该命令要求客户端进行身份验证以访问数据库。 在Valkey配置文件中配置密码: /etc/valkey/valkey.conf示例命令(page cache)
以下示例启用Valkey页缓存,将主机设置为127.0.0.1,并将数据库编号分配给1。 所有其他参数均设置为默认值。
bin/magento setup:config:set --page-cache=valkey --page-cache-valkey-server=127.0.0.1 --page-cache-valkey-db=1
查看Commerce环境配置
运行配置Valkey缓存的命令将更新Commerce环境配置(<Commerce-install-dir>app/etc/env.php):
| code language-php |
|---|
|
| code language-php |
|---|
|
| note note |
|---|
| NOTE |
从Commerce 2.4.9开始,使用简化的后端类型'backend' => 'valkey'而不是完整的类路径。 当指定简化名称时,将自动使用Symfony缓存。 |
配置其他缓存选项
Valkey预加载功能
由于Commerce将配置数据存储在Valkey缓存中,因此您可以预加载在页面之间重复使用的数据。 要查找必须预加载的键,请分析从Valkey传输到Commerce的数据。 Adobe建议预载每个页面上加载的数据,如SYSTEM_DEFAULT、EAV_ENTITY_TYPES和DB_IS_UP_TO_DATE。
Valkey使用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序列化程序
与PHP的默认序列化相比,Igbinary序列化程序提供了显着的性能改进。 必须在app/etc/env.php中手动配置它:
'cache' => [
'frontend' => [
'default' => [
'backend_options' => [
'server' => 'valkey',
'database' => '0',
'port' => '6379',
'serializer' => 'igbinary', // Enable Igbinary serialization
]
],
'page_cache' => [
'backend_options' => [
'server' => 'valkey',
'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
性能比较:
持久连接
持久连接跨请求重用现有的Valkey连接,使缓存操作速度提高5-15%。 在app/etc/env.php中配置:
'cache' => [
'frontend' => [
'default' => [
'backend_options' => [
'server' => 'valkey',
'database' => '0',
'port' => '6379',
'persistent' => '1',
'persistent_id' => 'cache_default',
'timeout' => '2.5',
'read_timeout' => '2.0',
]
],
'page_cache' => [
'backend_options' => [
'server' => 'valkey',
'database' => '1',
'port' => '6379',
'persistent' => '1',
'persistent_id' => 'cache_fpc',
]
]
]
]
persistent_id以防止连接冲突。完成优化的配置
以下是结合所有性能优化的适用于生产的配置:
'cache' => [
'frontend' => [
'default' => [
'id_prefix' => 'b0b_',
'backend' => 'valkey',
'backend_options' => [
'server' => 'valkey',
'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' => 'valkey',
'backend_options' => [
'server' => 'valkey',
'database' => '1',
'port' => '6379',
'serializer' => 'igbinary',
'compress_data' => '0',
'persistent' => '1',
'persistent_id' => 'cache_fpc',
]
]
],
'allow_parallel_generation' => false
]
验证Valkey连接
要验证Valkey和Commerce是否正确协同工作,请执行以下操作:
- 登录到运行Valkey和Commerce的服务器。
- 打开终端。
- 使用
valkey-cli monitor命令或valkey-cli ping命令检查连接。
如果命令成功,则Valkey正在运行,并且可以与Commerce应用程序通信。 如果失败,则Valkey和Commerce之间存在一个您需要解决的连接问题。
Valkey monitor命令
valkey-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"
1476826133.883312 [0 127.0.0.1:52369] "hget" "zc:k:ea6_GLOBAL__EVENT_CONFIG_CACHE" "d"
1476826133.898431 [0 127.0.0.1:52369] "hget" "zc:k:ea6_DB_PDO_MYSQL_DDL_STAGING_UPDATE_1" "d"
1476826133.898794 [0 127.0.0.1:52369] "hget" "zc:k:ea6_RESOLVED_STORES_D1BEFA03C79CA0B84ECC488DEA96BC68" "d"
1476826133.905738 [0 127.0.0.1:52369] "hget" "zc:k:ea6_DEFAULT_CONFIG_CACHE_STORE_DEFAULT_10__235__32__1080MAGENTO2" "d"
... more ...
1476826210.634998 [0 127.0.0.1:52439] "hmset" "zc:k:ea6_MVIEW_CONFIG" "d" "a:18:{s:19:\"design_config_dummy\";a:4:{s:7:\"view_id\";s:19:\"design_config_dummy\";s:12:\"action_class\";s:39:\"Magento\\Theme\\Model\\Indexer\\Mview\\Dummy\";s:5:\"group\";s:7:\"indexer\";s:13:\"subscriptions\";a:0:{}}s:14:\"customer_dummy\";a:4:{s:7:\"view_id\";s:14:\"customer_dummy\";s:12:\"action_class\";s:42:\"Magento\\Customer\\Model\\Indexer\\Mview\\Dummy\";s:5:\"group\";s:7:\"indexer\";s:13:\"subscriptions\";a:0:{}}s:13:\"cms_page_grid\";a:4:{s:7:\"view_id\";s:13:\"cms_page_grid\";s:12:\"action_class\";s:43:\"Magento\\Catalog\\Model\\Indexer\\Category\\Flat\";s:5:\"group\";s:7:\"indexer\";s:13:\"subscriptions\";a:1:{s:8:\"cms_page\";a:3:{s:4:\"name\";s:8:\"cms_page\";s:6:\"column\";s:7:\"page_id\";s:18:\"subscription_model\";N;}}}s:21:\"catalog_category_flat\";a:4:{s:7:\"view_id\";s:21:\"catalog_category_flat\";s:12:\"action_class\";s:43:\"Magento\\Catalog\\Model\\Indexer\\Category\\Flat\";s:5:\"group\";s:7:\"indexer\";s:13:\"subscriptions\";a:6:{s:23:\"catalog_category_entity\";a:3:{s:4:\"name\";s:23:\"catalog_category_entity\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";N;}s:31:\"catalog_category_entity_decimal\";a:3:{s:4:\"name\";s:31:\"catalog_category_entity_decimal\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";s:71:\"Magento\\CatalogStaging\\Model\\Mview\\View\\Category\\Attribute\\Subscription\";}s:27:\"catalog_category_entity_int\";a:3:{s:4:\"name\";s:27:\"catalog_category_entity_int\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";s:71:\"Magento\\CatalogStaging\\Model\\Mview\\View\\Category\\Attribute\\Subscription\";}s:28:\"catalog_category_entity_text\";a:3:{s:4:\"name\";s:28:\"catalog_category_entity_text\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";s:71:\"Magento\\CatalogStaging\\Model\\Mview\\View\\Category\\Attribute\\Subscription\";}s:31:\"catalog_category_entity_varchar\";a:3:{s:4:\"name\";s:31:\"catalog_category_entity_varchar\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";s:71:\"Magento\\CatalogStaging\\Model\\Mview\\View\\Category\\Attribute\\Subscription\";}s:32:\"catalog_category_entity_datetime\";a:3:{s:4:\"name\";s:32:\"catalog_category_entity_datetime\";s:6:\"column\";s:9:\"entity_id\";s:18:\"subscription_model\";s:71:\"Magento\\CatalogStaging\\Model\\Mview\\View\\Category\\Attribute\\Subscription\";}}}s:24:\"catalog_category_product\";a:4:{s:7:\"view_id\";s:24:\"catalog_category_product\";s:12:\"action_class\";s:46:\"Magento\\Catalog\\Model\\Indexer\\Category\\Product\";s:5:\"group\";s:7:\"indexer\";s:13:\"subscriptions\";a:2:{s:23:\"catalog_category_entity\";a:3:{s:4:\"name\";s:23:\"catalog_category_entity\";s:6:\"column\"
... more ...
Valkey ping命令
valkey-cli ping
预期的响应为: PONG
如果两个命令都成功,则Valkey设置正确。
检查压缩数据
要检查压缩的会话数据和页面缓存,请使用RESP.app工具。 它支持Commerce 2会话和页面缓存数据的自动解压缩,并以易于用户阅读的格式显示PHP会话数据。