Laravel 6 使用非零数据库时,redis 会话不会存储到 redis

Laravel 6 redis session not storing to redis when using database number other than zero

使用 laravel 6.8、php7.4。我正在使用 redis 会话,在 database.php 中它看起来像这样:

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

然后在 .env 中:

REDIS_DB=0

此设置似乎一切正常,我可以看到会话存储在 redis 中并且它匹配 \Session::getId()。问题是当我将 .env 中的 REDIS_DB 参数更新为其他内容时,例如 REDIS_DB=1,redis 中没有存储会话,即我可以使用 \Session::getId() 获取会话 ID 但它不存在当我做 print_r(Redis::keys('*')
任何帮助或提示将不胜感激。

默认的redis和session可能使用不同的redis,甚至在同一个redis中也可能使用不同的数据库。当您将数据库 1 设置为会话连接时,它将始终从数据库 1 读取、写入。但是由于您的 redis 的 default 数据库连接设置为 0,您无法通过调用 Redis::keys('*') 获取会话密钥,因为数据位于两个不同的数据库中。

有两种方法可以解决;

  • 查询时设置为数据库名;
Redis::select(1);
return Redis::keys('*');
  • 通过将 REDIS_DB 设置为 1 来更新默认的 redis 配置。