簡體   English   中英

Laravel:如何將緩存和會話分成不同的redis數據庫?

[英]Laravel: how to separate cache and session into different redis database?

我想將會話和緩存數據放入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,
    ),
),

session.php文件:

return array(
    'driver' => 'redis',
    'connection' => 'session',
);

cache.php:

'driver' => 'redis',

但是,我寫這樣的代碼:

Cache::remember('aa',1,function(){
    return 'bb';
});

緩存驅動程序使用與會話驅動程序相同的redis數據庫,這會導致:

127.0.0.1:6379[1]> keys *
1) "aa"
2) "e0606244bec40b0352fb2b7b65d98049e49f6189"

任何人都知道如何強制緩存使用特定的redis連接? 或者我必須將它們混合在一起?

介紹

這是我的注釋,對於其他一些遇到這個問題的人,我認為這應該是在文檔中。

默認情況下,redis為您提供了16個單獨的數據庫,但是開箱即用的laravel將嘗試將數據庫0用於會話和緩存。

我們的解決方案是讓Redis使用數據庫0進行緩存,使用數據庫1進行Session,通過運行php artisan cache:clear解決會話問題php artisan cache:clear問題。

注意:在Laravel 5.1上測試過

1.設置Session 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,
   ],
],

2.使用session連接

修改config/session.php ,更改以下內容:

'connection' => null,

至:

'connection' => 'session',

3.使用Redis作為會話驅動程序

修改.env ,更改SESSION_DRIVER

SESSION_DRIVER=redis

4.測試出來

執行以下artisan命令,然后檢查您的登錄狀態:

php artisan cache:clear

如果登錄狀態仍然存在,瞧!

Laravel 5現在支持這一點。

https://github.com/laravel/framework/commit/d10a840514d122fa638eb5baa24c8eae4818da3e

您可以通過修改config/cache.php來選擇redis連接

'stores' => [
    'redis' => [
        'driver' => 'redis',
        'connection' => 'your-connection-name',
    ],
],

Laravel 4 CacheManager不支持選擇redis連接。

您需要做的是修改/擴展CacheManager並覆蓋createRedisDriver()方法。

修改此行

return $this->repository(new RedisStore($redis, $this->getPrefix()));

return $this->repository(
    new RedisStore($redis, $this->getPrefix(), 
    $this->app['config']['cache.redis'])
);

現在,您可以在cache.php中定義配置

'redis' => 'your-connection-name'

Laravel 5.5:

database.php應如下所示:

'redis' => [

    'client' => 'predis',

    'default' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => 0,
    ],

    'session' => [
        'host' => env('REDIS_HOST', '127.0.0.1'),
        'password' => env('REDIS_PASSWORD', null),
        'port' => env('REDIS_PORT', 6379),
        'database' => 1,
    ],

],

在session.php中,您還必須更新右鍵的“連接”鍵。 在這種情況下'會話'

'connection' => 'session',

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM