当生存时间达到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个密钥已过期。
有什么想法吗?
感谢。
答案 0 :(得分:21)
因为你正在做'...',所以很难肯定,但我会说你在那部分设置了mykey,这将有效地消除过期。
仅当使用DEL删除密钥时才会清除超时 命令或使用SET或GETSET命令覆盖
Also, regarding the -1 reply from TTL
返回值
整数回复:TTL以秒为单位,或者当密钥没有时为-1 存在或没有超时。
编辑:请注意,此行为在Redis 2.8
中已更改从Redis 2.8开始,如果错误发生变化则返回值:
如果密钥不存在,则命令返回-2 如果密钥存在但没有关联到期,则该命令返回-1。
换句话说,如果您的密钥存在,它似乎是持久的,即没有任何到期设置。
编辑:如果我在REDIS从服务器上创建密钥,似乎我可以重现这一点,从服务器不会在没有主输入的情况下删除密钥,因为通常你不会在从服务器上本地创建密钥。这是这种情况吗?
但是,连接到主服务器的从服务器不会使密钥过期 独立(但将等待来自主人的DEL), 他们仍将采取现有的到期状态 数据集,所以当奴隶被选为主人时,它将能够 独立到期,完全充当主人。