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 配置。
使用 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 配置。