Laravel: キャッシュとセッションを別の Redis データベースに分離するには? 質問する

Laravel: キャッシュとセッションを別の Redis データベースに分離するには? 質問する

セッションとキャッシュのデータを 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.phpsessionキーを追加します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,
   ],
],

session2.接続を活用する

修正してconfig/session.php、次の点を変更します。

'connection' => null,

に:

'connection' => 'session',

3. Redisをセッションドライバーとして使用する

修正.env、変更SESSION_DRIVER:

SESSION_DRIVER=redis

4. テストする

次の artisan コマンドを実行し、ログイン状態を確認します。

php artisan cache:clear

ログイン状態が続く場合は、これで完了です。

おすすめ記事