【发布时间】:2017-09-18 20:48:45
【问题描述】:
我正在使用Laravel 5.4、Predis 和最新的Redis(或Redis for Windows)。
密钥保存没有问题。所以,我怀疑这是一个配置问题。
问题是它们不会过期。 密钥会被重复使用,直到过期...类似于会话的工作方式。
如果密钥不存在,我会创建一次。然后我按照同样的逻辑设置过期时间。
在控制器中,我有
use Illuminate\Support\Facades\Redis;
在其中一个函数中,获取连接实例:
$redis = Redis::connection();
在创建密钥之前,我会检查是否存在(简化)然后创建并设置过期时间。
if(!$redis->exists($some_unique_key))
{
//set the key
$redis->set($some_unique_key, 'Some Value'));
//set the expiration
//I understand this means expire in 60s.
$redis->expire($some_unique_key,60);
}
为什么密钥不会过期?
正如我所提到的,其他一切都有效。如果我监控,我会看到密钥更新没有问题,并且可以查询它。
为了记录,我已阅读:
- Why Redis keys are not expiring?
- Laravel flash or session messages not expiring [ not maintained Updated ]
- my redis keys do not expire
Laravel 文档中没有关于过期的内容:
更新 1
调查设置(更新)密钥重置到期的可能原因
更新 2
使用@for_thestack 的推理(在 REDIS 命令中)提出解决方案。用代码查看我的答案。随意投票@for_thestack :)
【问题讨论】:
-
真的没有意义,如果你请求一个key,过了过期时间,它会立即被删除。您确定在 60 秒过去之前没有设置密钥过期时间的语句吗?尝试
TTL获取密钥以检查它 -
感谢 cmets @Mr.Phoenix。在得到答案的过程中,我确实最终使用了
TTL