セッションとキャッシュのデータを Redis に格納したいです。database.php の設定は次のとおりです。
'redis' => array(
'cluster' => false,
'default' => array(
'host' => '192.168.56.101',
'port' => 6379,
'database' => 0,
),
'session' => array(
'host' => '192.168.56.101',
'port' => 6379,
'database' => 1,
),
),
セッション.php:
return array(
'driver' => 'redis',
'connection' => 'session',
);
キャッシュ.php:
'driver' => 'redis',
ただし、次のようなコードを記述します。
Cache::remember('aa',1,function(){
return 'bb';
});
キャッシュ ドライバーはセッション ドライバーと同じ Redis データベースを使用するため、次のようになります。
127.0.0.1:6379[1]> keys *
1) "aa"
2) "e0606244bec40b0352fb2b7b65d98049e49f6189"
キャッシュに特定の Redis 接続を強制的に使用させる方法を知っている人はいますか? それとも、それらを混ぜ合わせる必要がありますか?
ベストアンサー1
導入
これは私のメモです。この問題に遭遇した他の人のために、これはドキュメントに記載する必要があると思います。
デフォルトでは、Redis は 16 個の個別のデータベースを提供しますが、Laravel はそのままではセッションとキャッシュの両方にデータベース 0 を使用しようとします。
私たちの解決策は、データベース 0 とセッション用のデータベース 1 を使用して Redis キャッシュを実行し、実行によってセッションがクリアされるphp artisan cache:clear
問題を解決することです。
注: Laravel 5.1でテスト済み
1. セッションRedis接続の設定
オプションを変更しconfig/database.php
、session
キーを追加しますredis
。
'redis' => [
'cluster' => false,
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
'session' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 1,
],
],
session
2.接続を活用する
修正してconfig/session.php
、次の点を変更します。
'connection' => null,
に:
'connection' => 'session',
3. Redisをセッションドライバーとして使用する
修正.env
、変更SESSION_DRIVER
:
SESSION_DRIVER=redis
4. テストする
次の artisan コマンドを実行し、ログイン状態を確認します。
php artisan cache:clear
ログイン状態が続く場合は、これで完了です。