デフォルトおよびページキャッシュ用にRedisを設定
Commerceには、Redis ページとデフォルトのキャッシュを設定するためのコマンドラインオプションが用意されています。 <Commerce-install-dir>app/etc/env.php ファイルを編集してキャッシュを設定できますが、特に初期設定では、コマンドラインを使用することをお勧めします。 コマンドラインは、設定が構文的に正しいことを確認するための検証を提供します。
前提条件:
続行する前にRedisをインストールします。
サポートされているフレームワーク
-
Zend Cache (2.4.8以前) — Commerce 2.4.8以前のレガシーRedis バックエンド:
- 従来のRedis バックエンド – 完全なクラス パス (
Magento\Framework\Cache\Backend\Redis)を使用します - プリロード キー – 頻繁に使用するキャッシュ キーのプリロードをサポート
- Lua スクリプト — ガベージコレクション用Lua
- 圧縮 — データ圧縮をサポート
- 従来のRedis バックエンド – 完全なクラス パス (
-
Symfony Cache (2.4.9+) — Commerce 2.4.9以降、Symfony Cacheは最新のPSR-6準拠のキャッシュ実装をRedisに提供し、パフォーマンスが大幅に向上しました。
- 自動Redis パイプライン – 複数の操作を単一のリクエストにバッチ処理して、待ち時間を短縮します
- PSR-6 TagAwareAdapter — アトミックオペレーションによる効率的なタグベースのキャッシュ無効化
- Igbinary serialization — バイナリのシリアル化により、キャッシュ エントリ サイズが45%削減され、速度が5 ~ 10%向上します
- 永続的な接続の強化 – より安定した接続プールと、フォークされたプロセスの処理の改善
- 最適化されたLua スクリプト — サーバーサイドの実行とパイプライン処理を組み合わせて、効率を最大化
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-server127.0.0.1cache-backend-redis-port6379cache-backend-redis-db重要: Redisを複数のタイプのキャッシュに使用する場合、データベース番号は異なる必要があります。 デフォルトのキャッシングデータベース番号を0に、ページキャッシングデータベース番号を1に、セッションストレージデータベース番号を2に割り当てることをお勧めします。
0cache-backend-redis-passwordauth コマンドが有効になり、クライアントはデータベースにアクセスするために認証する必要があります。 パスワードは、Redisの設定ファイル /etc/redis/redis.confで直接設定されていますcache-backend-redis-use-luaLua: Luaを使用すると、Redis内でアプリケーションロジックの一部を実行できるようになり、パフォーマンスが向上し、アトミック実行によるデータの一貫性が確保されます。
0cache-backend-redis-use-lua-on-gcLua: Luaを使用すると、Redis内でアプリケーションロジックの一部を実行できるようになり、パフォーマンスが向上し、アトミック実行によるデータの一貫性が確保されます。
1コマンドの例(デフォルトのキャッシュ)
次の例では、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-server127.0.0.1page-cache-redis-port6379page-cache-redis-db重要: Redisを複数のタイプのキャッシュに使用する場合、データベース番号は異なる必要があります。 デフォルトのキャッシングデータベース番号を0に、ページキャッシングデータベース番号を1に、セッションストレージデータベース番号を2に割り当てることをお勧めします。
0page-cache-redis-passwordauth コマンドが有効になり、クライアントはデータベースにアクセスするために認証する必要があります。 Redis設定ファイル内でパスワードを設定します:/etc/redis/redis.conf次の例では、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
Commerce環境設定の確認
Redis キャッシュを構成するコマンドを実行すると、Commerce環境設定(<Commerce-install-dir>app/etc/env.php)が更新されます。
| code language-php |
|---|
|
| code language-php |
|---|
|
| note |
|---|
| NOTE |
Commerce 2.4.9以降では、完全なクラスパスの代わりに、簡略化されたバックエンドタイプ 'backend' => 'redis'を使用します。 シンフォニーキャッシュは、簡略化された名前が指定されると自動的に使用されます。 |
その他のキャッシュオプションの設定
Redis プリロード機能
Commerceは設定データをRedis キャッシュに保存するため、ページ間で再利用されるデータをプリロードできます。 プリロードする必要があるキーを見つけるには、RedisからCommerceに転送されるデータを分析します。 Adobeは、SYSTEM_DEFAULT、EAV_ENTITY_TYPES、DB_IS_UP_TO_DATEなど、すべてのページに読み込まれるデータのプリロードを提案します。
Redisは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 Cacheのパフォーマンス最適化
Symfony Cacheを使用している場合は、Igbinary シリアライザーの設定、igbinary PHP拡張機能およびphpredis拡張機能のインストール、および永続的な接続の有効化により、パフォーマンスをさらに最適化できます。
バイナリシリアライザー
Igbinary シリアライザーは、PHPのデフォルトのシリアル化よりもパフォーマンスを大幅に向上させます。 app/etc/env.phpで手動で設定する必要があります:
'cache' => [
'frontend' => [
'default' => [
'backend_options' => [
'server' => 'redis',
'database' => '0',
'port' => '6379',
'serializer' => 'igbinary', // Enable Igbinary serialization
]
],
'page_cache' => [
'backend_options' => [
'server' => 'redis',
'database' => '1',
'port' => '6379',
'serializer' => 'igbinary', // Enable Igbinary for page cache too
]
]
]
]
PHP 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
パフォーマンスの比較:
永続的な接続
永続的な接続リクエストをまたいで既存のRedis接続を再利用することで、キャッシュ運用を5~15%高速化できます。 app/etc/env.phpで設定:
'cache' => [
'frontend' => [
'default' => [
'backend_options' => [
'server' => 'redis',
'database' => '0',
'port' => '6379',
'persistent' => '1',
'persistent_id' => 'cache_default',
'timeout' => '2.5',
'read_timeout' => '2.0',
]
],
'page_cache' => [
'backend_options' => [
'server' => 'redis',
'database' => '1',
'port' => '6379',
'persistent' => '1',
'persistent_id' => 'cache_fpc',
]
]
]
]
persistent_idを使用します。最適化された設定を完了
以下は、すべてのパフォーマンス最適化を組み合わせた実稼動対応のSymfony設定です。
'cache' => [
'frontend' => [
'default' => [
'id_prefix' => 'b0b_',
'backend' => 'redis',
'backend_options' => [
'server' => 'redis',
'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' => 'redis',
'backend_options' => [
'server' => 'redis',
'database' => '1',
'port' => '6379',
'serializer' => 'igbinary',
'compress_data' => '0',
'persistent' => '1',
'persistent_id' => 'cache_fpc',
]
]
],
'allow_parallel_generation' => false
]
Redis接続の確認
RedisとCommerceが正常に連携していることを確認するには:
- RedisとCommerceを実行するサーバーにログインします。
- ターミナルを開きます。
redis-cli monitorコマンドまたはredis-cli pingコマンドを使用して、接続を確認します。
コマンドが成功した場合、Redisは実行中であり、Commerce アプリケーションと通信できます。 エラーが発生した場合は、RedisとCommerce間の接続の問題を解決する必要があります。
Redis monitor コマンド
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 セッションデータを人間が読める形式で表示します。