小编典典

我的Redis密钥没有过期

redis

当生存时间达到0时,我的Redis服务器不会删除密钥。

这是一个示例代码:

redis-cli
>SET mykey "ismykey"
>EXPIRE mykey 20
#check TTL
>TTL mykey
>(integer) 17
> ...
>TTL mykey
>(integer) -1
#mykey chould have expired:
>EXISTS mykey
>(integer) 1
>#oh still there, check its value
>GET mykey
>"ismykey"

如果我通过redis检查信息返回,它说0个密钥已过期。

任何想法?

谢谢。


阅读 219

收藏
2020-06-20

共1个答案

小编典典

由于您正在执行“ …”,因此很难确定,但是我要说的是您在该部分设置了mykey,这将有效地消除过期。

从EXPIRE手册

仅当使用DEL命令删除密钥或使用SET或GETSET命令覆盖密钥时,才清除超时

另外,关于TTL的-1答复

返回值

整数回复:TTL(秒)或-1(如果密钥不存在或没有超时)。

编辑:请注意,此行为在Redis 2.8中已更改

从Redis 2.8开始,
如果更改了错误,则返回值:如果键不存在,则命令返回-2。
如果密钥存在但没有关联的过期时间,则命令返回-1。

换句话说,如果您的密钥存在,那么它似乎是持久的,即没有任何过期设置。

编辑:如果我在REDIS从属服务器上创建密钥,似乎可以重现,没有主输入的情况下从属将不会删除密钥,因为通常您不会在从属本地创建密钥。这是这种情况吗?

但是,虽然连接到主服务器的从服务器不会独立使密钥失效(而是等待来自主服务器的DEL),但它们仍将处于数据集中存在的失效的完整状态,因此当从服务器被选为主人,它将能够独立使密钥失效,从而完全充当主人。

2020-06-20