2012-08-07 62 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