我的 redis 服务器在生存时间达到 0 时不会删除密钥。
下面是一个示例代码:
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 个密钥已过期。
知道吗?
谢谢。
既然你正在做一个"..."很难确定,但我想说你在这部分设置了mykey,这将有效地消除过期。
来自过期手册
仅当使用 DEL 删除密钥时,才会清除超时 命令或使用 SET 或 GETSET 命令覆盖
另外,关于TTL的-1回复
返回值
整数回复:TTL 以秒为单位,当键不表示时为 -1 存在或没有超时。
编辑:请注意,此行为在Redis 2.8中发生了变化
从 Redis 2.8 开始,发生错误时的返回值发生了变化:
如果密钥不存在,则该命令返回 -2。
如果密钥存在但没有关联的过期时间,则该命令返回 -1。
换句话说,如果您的密钥存在,它似乎是持久的,即没有任何过期设置。
编辑:如果我在 REDIS 从属服务器上创建密钥,似乎我可以重现这一点,如果没有主输入,从属服务器不会删除密钥,因为通常您不会在从属服务器上本地创建密钥。这里的情况是这样吗?
但是,虽然连接到主设备的从属设备不会使密钥过期 独立(但将等待来自主站的 DEL), 他们仍将采用 数据集,因此当从属服务器被选为主站时,它将能够 独立地使密钥过期,完全充当主节点。