2012-08-07 64 views
12

我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" 

如果我检查由信息返回它说0键已过期。

有什么想法?

谢谢。

回答

19

既然你做了“......”这是很难肯定地说,但我说你那部分,这将有效地消除在呼气时设置的myKey。

From the EXPIRE manual

当钥匙使用DEL 命令移除或使用SET覆盖或GETSET命令

Also, regarding the -1 reply from TTL

返回值

超时仅清零

整数回复:TTL以秒或-1为单位,当密钥不存在或不存在超时值时 。

编辑:请注意,这种行为在Redis的2.8

改变与Redis的2.8出错的情况下返回值开始改变:
的命令返回-2如果该键不存在。
命令返回-1如果该键存在,但没有相关的到期。

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

编辑:看来我可以重现这个,如果我创建的Redis从服务器上的关键,从不会删除无主输入密钥,因为通常你不会在本地上的从创建关键点。这是这种情况吗?

但是同时连接到主从机不会过期键 独立(但将等待DEL从主推出), 他们仍然采取全状态的到期现有的 数据集,所以当从当选到主它将能够 独立到期的钥匙,完全作为主。

+0

感谢您这么快回复。我的片段中的'...'仅意味着我等待20秒,直到TTL返回-1。我不在这里输入任何命令。所以到期应该直到最后,不是吗? – user1151446 2012-08-07 15:34:52

+0

@ user1151446看我的编辑。 – 2012-08-07 15:43:09

+0

感谢Joachim!就是这一点,我无意中将我的钥匙放在奴隶身上,而不是主人,这是不一致的。如果我切换到我的主人一切正常。 – user1151446 2012-08-07 15:59:32