コストを抑えるために、2つの全く関連のないLaravelアプリで、ElastiCacheを利用しようとした際に、
それぞれのアプリで、キーバリューが干渉してしまうのではないかと考え、調べてみたのですが、
思ったよりも時間がかかってしまったので、簡単ですが投稿します!
結論: 問題なさそう!
調査内容
- stackoverflowに完璧な回答がありました。
要約すると、Redisに追加する際に、prefixをキーに追加して区別することができそうです。
Laravel10ではconfig/cache.phpで、デフォルトでAPP_NAMEを埋め込んでくれていました。
//関連部分翻訳
https://laravel.com/docs/5.6/queues#driver-prerequisites が言っています:
redisキュードライバーを使用するには、config/database.php設定ファイルでRedisデータベース接続を構成する必要があります。
そして、https://laravel.com/docs/5.6/redis#predis が言っています:
デフォルトのホスト、ポート、データベース、およびパスワードサーバーの構成オプションに加えて、Predisは、あなたのRedisサーバーごとに定義することができる追加の接続パラメータをサポートしています。これらの追加設定オプションを利用するには、config/database.php設定ファイル内のRedisサーバー設定に追加してください。
connection parameters」ページを読むと、最終的にhttps://github.com/nrk/predis/wiki/Client-Options、「prefix」がサポートされているオプションであると書かれています。
- また、Laravel10だと、Laravelのconfig/cache.php内にも以下の記述がありました。
/*
|--------------------------------------------------------------------------
| Cache Key Prefix
|--------------------------------------------------------------------------
|
| When utilizing the APC, database, memcached, Redis, or DynamoDB cache
| stores there might be other applications using the same cache. For
| that reason, you may prefix every cache key to avoid collisions.
|
*/
'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache_'),
#和訳
APC、データベース、memcached、Redis、DynamoDBのキャッシュストアを利用する場合、同じキャッシュを利用する他のアプリケーションが存在する可能性があります。そのため、衝突を避けるために、すべてのキャッシュ・キーにプレフィックスを付けることがあります。