Laravel:如何将缓存和会话分离到不同的 redis 数据库中?

2022-08-30 19:17:15

我想将会话和缓存数据放入 redis 中。这是我在数据库中的配置.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 用于会话和缓存。

我们的解决方案是让 Redis 缓存使用数据库 0,数据库 1 用于会话,在那里通过运行问题解决会话清除。php artisan cache:clear

注意:在 Laravel 5.1 中测试

1. 设置会话 Redis 连接

修改 ,将键添加到选项:config/database.phpsessionredis

'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 作为会话驱动程序

修改 , 更改 :.envSESSION_DRIVER

SESSION_DRIVER=redis

4. 测试

执行以下工匠命令,然后检查您的登录状态:

php artisan cache:clear

如果登录状态仍然存在,瞧!


答案 2

拉拉维尔 5.5:

数据库.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,
    ],

],

在会话中.php您还必须将密钥“连接”更新为正确的密钥。在本例中为“会话”

'connection' => 'session',

推荐