我使用 redis 作为会话驱动程序,我想清除缓存,同时保持会话数据,所以基本上用户可以保持登录。
注意:我不想为会话和其他缓存数据使用单独的 redis 实例。
简介
默认情况下,redis 为您提供 16 个单独的数据库,但开箱即用的 laravel 将尝试使用数据库 0 进行会话和缓存。
我们的解决方案是让 Redis 缓存使用数据库 0,而数据库 1 用于 Session,在那里通过运行php artisan cache:clear
来解决会话清除问题。
1.设置会话 Redis 连接
修改config/database.php
,将session
键添加到redis
选项中:
'redis' => [
'cer' => false,
'default' => [
'st' => env('REDIS_HOST', 'localst'),
'pword' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
'session' => [
'st' => env('REDIS_HOST', 'localst'),
'pword' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 1,
],
],
2.使用session
连接
修改config/session.php
,更改以下内容:
'connection' => null,
收件人:
'connection' => 'session',
3.使用 Redis 作为会话驱动程序
Modify.env
,changeSESSION_DRIVER
:
SESSION_DRIVER=redis
4.Testing out
执行以下工匠命令,然后检查您的登录状态:
php artisan cache:clear
如果登录状态仍然存在,voil à!
我不知道 Laravel,但一般来说最好的两个选择是:
更改缓存键的格式。您应该使用版本控制的缓存键,以便将来可以执行此操作,即“cache.1”。这样您就可以递增,然后它使所有密钥一次变得无关紧要。
将缓存移动到同一 redis 实例中的不同 db 编号。这样,您以后也可以对该 db 编号执行FLUSHDB
以清除缓存。
在这两个选项中,在您第一次执行之后,如果缓存键没有过期,您应该创建一个使用SCAN
删除旧密钥的脚本。请参阅http://redis.io/commands/scan
作为一个侧面说明,将缓存和其他东西保存在同一个 redis 实例中通常是一个坏主意,因为在缓存中您通常使用基于 LRU 的驱逐,并且您不想将其与较少的易失性密钥混合。
'redis' => [
'cer' => false,
'default' => [
'st' => '127.0.0.1',
'port' => 6379,
'database' => 0,
],
],
redis 连接选项中有 'database',只需为 session 和 cache 选择不同的数据库即可。我只希望 redis 缓存驱动程序使用 flushdb not flushall 进行刷新:)。
Laravel Cache::clear () 发送 Redis flushall 命令,这将转储一切,所以在我的经验中不是很有用。您将需要扩展缓存类,并创建一个自定义集来索引您希望能够清除的缓存数据。然后构建另一个函数来读取集合,并为集合中的每个键发出 Redis del () 命令。发布一些工作代码,并在必要时进一步详细说明
Notagolfers 建议将缓存和会话分离到不同的 redis 数据库中不是一个 had 调用,但您仍然需要扩展缓存类来实现 Redis 数据库配置开关
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(52条)