パフォーマンス最適化のためのL2 キャッシュ設定
L2 (2 レベル)キャッシュでは、各web ノードにローカルキャッシュレイヤーを追加することで、リモートキャッシュストレージ(RedisまたはValkey)とCommerce アプリケーション間のネットワークトラフィックを削減します。 標準的なCommerce インスタンスでは、リクエストごとに約300 KBが転送され、状況によってはトラフィックが急速に増加して1,000 リクエストを超える場合があります。
L2 キャッシュでは、各web ノードは頻繁にアクセスされるデータをローカルに保存し、次の2つの目的でリモートキャッシュを使用します。
- キャッシュデータのバージョンを確認して、最新のキャッシュがローカルに保存されていることを確認する
- 更新されたキャッシュデータをリモートストアからローカルマシンに転送する
Commerceは、ハッシュ化されたデータバージョンをリモートキャッシュに保存し、サフィックス :hashを通常のキーに追加します。 ローカルキャッシュが古くなると、データはキャッシュアダプタを介してリモートマシンから取得されます。
使用可能なL2 キャッシュ実装は2つあります。
従来のL2 キャッシュ設定(RemoteSynchronizedCache)
次の例を使用して、app/etc/env.php ファイルの既存のキャッシュセクションを変更または置換します。
'cache' => [
'frontend' => [
'default' => [
'backend' => '\\Magento\\Framework\\Cache\\Backend\\RemoteSynchronizedCache',
'backend_options' => [
'remote_backend' => '\\Magento\\Framework\\Cache\\Backend\\Redis',
'remote_backend_options' => [
'persistent' => 0,
'server' => 'localhost',
'database' => '0',
'port' => '6379',
'password' => '',
'compress_data' => '1',
],
'local_backend' => 'Cm_Cache_Backend_File',
'local_backend_options' => [
'cache_dir' => '/dev/shm/'
]
],
'frontend_options' => [
'write_control' => false,
],
]
],
'type' => [
'default' => ['frontend' => 'default'],
],
],
どこで:
-
backendはL2 キャッシュ実装です。 -
backend_optionsはL2 キャッシュ設定です。remote_backendはリモート キャッシュ実装です:RedisまたはMySQL。remote_backend_optionsはリモート キャッシュ設定です。local_backendはローカル キャッシュ実装です:Cm_Cache_Backend_Filelocal_backend_optionsはローカル キャッシュ設定です。cache_dirは、ローカルキャッシュが保存されているディレクトリのファイルキャッシュ固有のオプションです。
Adobeでは、次を使用して、リモート キャッシュ (\Magento\Framework\Cache\Backend\Redis)とCm_Cache_Backend_Fileを共有メモリ内のデータのローカル キャッシュにRedisを使用することをお勧めします:'local_backend_options' => ['cache_dir' => '/dev/shm/']
Adobeでは、Redisへの負荷を大幅に軽減するため、cache preload機能の使用をお勧めします。 プリロード キーのサフィックス ':hash’を追加することを忘れないでください。
古いキャッシュオプション
Commerce 2.4以降、use_stale_cache オプションは、以前にキャッシュされたデータを処理し、新しいキャッシュデータを並行プロセスで生成することで、特定の場合のパフォーマンスを向上させることができます。
一般的に、ロック待ちのトレードオフは、パフォーマンスの観点から許容されます。 ただし、ブロック数やキャッシュエントリ数が増えると、ロック待ちに時間がかかります。 一部のシナリオでは、プロセスの待機時間は最大キー数 x 検索タイムアウトです。 まれに、マーチャントがBlock/Config キャッシュに数百のキーを持つことがあるため、ロックの小さなルックアップタイムアウトでも数秒かかる場合があります。
'use_stale_cache' => trueを追加します。Adobeでは、use_stale_cache オプションを有効にすることをお勧めします。これには、次のようなキャッシュタイプが最も利用されます。
block_htmlconfig_integration_apiconfig_integrationfull_pagelayoutreflectiontranslate
Adobeでは、default キャッシュタイプにuse_stale_cache オプションを有効にすることはお勧めしません。
次のコードは、設定例を示しています。
'cache' => [
'frontend' => [
'default' => [
'backend' => '\\Magento\\Framework\\Cache\\Backend\\RemoteSynchronizedCache',
'backend_options' => [
'remote_backend' => '\\Magento\\Framework\\Cache\\Backend\\Redis',
'remote_backend_options' => [
'persistent' => 0,
'server' => 'localhost',
'database' => '0',
'port' => '6379',
'password' => '',
'compress_data' => '1',
],
'local_backend' => 'Cm_Cache_Backend_File',
'local_backend_options' => [
'cache_dir' => '/dev/shm/'
]
],
'frontend_options' => [
'write_control' => false,
],
],
'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' => '0',
'port' => '6379',
'password' => '',
'compress_data' => '1',
],
'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']
],
],
最新のSymfony L2 キャッシュ実装
[2.4.9-beta]{class="badge negative" title="2.4.9 ベータ版でのみ使用できます。"}
Commerce 2.4.9以降では、Symfony Cache ベースのL2 キャッシュ実装(symfony_l2 バックエンド)を使用できます。これにより、従来のRemoteSynchronizedCacheよりもパフォーマンスが大幅に向上し、最新のPSR-6準拠のキャッシュ実装が提供されます。
Symfony L2 キャッシュのメリット
- 最新のアーキテクチャ: Symfony Cache コンポーネント上に構築(PSR-6準拠)
- パフォーマンスの向上: Igbinaryのシリアル化、gzip圧縮、およびLua スクリプトのネイティブサポート
- 永続的な接続:接続プールでRedisまたはValkey接続のオーバーヘッドを削減します
- キーのプリロード:重要なデータのキャッシュ キーのプリロードをサポートしています
- 古いキャッシュ サポート:
use_stale_cacheオプションとの完全な互換性 - 簡略化された設定:よりクリーンなバックエンドの型名(
redis、valkey、file)
Symfony L2 キャッシュを使用した設定例
L2 キャッシュに簡略化されたsymfony_l2 バックエンドタイプを使用します。
'cache' => [
'frontend' => [
'default' => [
'backend' => 'symfony_l2',
'backend_options' => [
// L2 (Remote): Redis with Symfony Cache
'remote_backend' => 'redis',
'remote_backend_options' => [
'server' => 'localhost',
'database' => '0',
'port' => '6379',
'password' => '',
'serializer' => 'igbinary',
'compression_lib' => 'gzip',
'persistent_id' => 'magento_l2_default',
'timeout' => '2.5',
'read_timeout' => '2.0',
'use_lua' => '1',
'preload_keys' => [
'prefix_EAV_ENTITY_TYPES:hash',
'prefix_GLOBAL_PLUGIN_LIST:hash',
'prefix_DB_IS_UP_TO_DATE:hash',
'prefix_SYSTEM_DEFAULT:hash',
],
],
// L1 (Local): File cache
'local_backend' => 'file',
'local_backend_options' => [
'cache_dir' => '/dev/shm/magento_l1'
],
'cleanup_percentage' => 90,
],
]
],
'type' => [
'default' => ['frontend' => 'default'],
],
],
Symfony L2 キャッシュと古いキャッシュ
古いキャッシュをサポートするように個別のフロントエンドを設定します。
'cache' => [
'frontend' => [
// Default frontend: NO stale cache
'default' => [
'backend' => 'symfony_l2',
'backend_options' => [
'remote_backend' => 'redis',
'remote_backend_options' => [
'server' => 'localhost',
'database' => '0',
'port' => '6379',
'serializer' => 'igbinary',
'compression_lib' => 'gzip',
'persistent_id' => 'magento_l2_default',
],
'local_backend' => 'file',
'local_backend_options' => [
'cache_dir' => '/dev/shm/magento_l1'
],
],
],
// Stale cache enabled frontend
'stale_cache_enabled' => [
'backend' => 'symfony_l2',
'backend_options' => [
'remote_backend' => 'redis',
'remote_backend_options' => [
'server' => 'localhost',
'database' => '0',
'port' => '6379',
'serializer' => 'igbinary',
'compression_lib' => 'gzip',
'persistent_id' => 'magento_l2_stale',
],
'local_backend' => 'file',
'local_backend_options' => [
'cache_dir' => '/dev/shm/magento_l1_stale'
],
'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'],
],
],
Symfony L2 キャッシュのバックエンドオプション
remote_backend'redis'redis、valkeyまたはfileremote_backend_options[]local_backend'file'fileまたはapculocal_backend_options[]cleanup_percentage90use_stale_cachefalseValkey サポート
symfony_l2 バックエンドでは、Valkeyをリモートバックエンドとしてもサポートしています。
'backend_options' => [
'remote_backend' => 'valkey', // Use Valkey instead of Redis
'remote_backend_options' => [
'server' => 'localhost',
'database' => '0',
'port' => '6379',
'serializer' => 'igbinary',
'compression_lib' => 'gzip',
],
// ... rest of configuration
]
設定オプションの詳細については、次を参照してください。