2016-12-07 55 views
1
127.0.0.1:6379> keys * 

1) "trending_showrooms" 
2) "trending_hashtags" 
3) "trending_mints" 

127.0.0.1:6379> sort trending_mints by *->id DESC LIMIT 0 12 

1) "mint_14216" 
2) "mint_14159" 
3) "mint_14158" 
4) "mint_14153" 
5) "mint_14151" 
6) "mint_14146" 

鑰匙已過期,但鑰匙在裏面設置。我必須在redis中自動刪除過期密鑰如何自動從集中刪除過期密鑰?

+0

「如何自動從一組中刪除過期的密鑰? - 爲了澄清,你是否希望在一個集合內失效一個單獨的成員,或者期滿集合鍵和其中的所有內容? – davissp14

+0

是的,我想在一個集合內過期個別成員 –

回答

0

請準備好本頁面完全:https://redis.io/topics/notifications

綜上,你必須有一個哨兵節目聽PUB/SUB的消息,你必須改變redis.conf文件,以使KeyEvent的到期通知:在redis.conf

notify-keyspace-events Ex 

爲了ENAB樂的特徵用於一個非空字符串,的 多個字符,其中的每個字符具有根據以下表格

E  Keyevent events, published with [email protected]<db>__ prefix. 
x  Expired events (events generated every time a key expires) 

然後前哨程序必須監聽信道[email protected]__:del到特殊的意義 組成如果你的數據庫是0。如果使用非零值,請更改數據庫編號。

然後,當您訂閱頻道並收到即將到期的key時,只需發出SREM trending_mints key即可將其從集中移除。

重要

當一個鍵被訪問和被發現 通過上述系統中的一個過期生成呼出事件,其結果不存在 保證Redis的服務器將能夠在關鍵時間達到零值時生成過期的事件 。

如果沒有命令目標的關鍵不斷,並有與 許多密鑰的TTL相關的,可以有時間 關鍵的生存時間下降到零之間的顯著延遲,時間過期事件是 產生。當Redis的服務器刪除 密鑰而不是當從理論上生存時間達到值的零

基本上過期事件被生成。

所以按鍵因過期被刪除,但通知保證在當下TTL發生變爲零。

還有,如果您的哨兵程序錯過PUB/SUB消息,那麼...就是這樣,您將不會再被通知! (這也在上面的鏈接中)

+0

「鑰匙已過期,但鑰匙在裏面設置」 - 我相信他指的是集合內的成員,而不是關鍵本身。 – davissp14

+0

Hi @ davissp14,我認爲他有一個重複的結構,每個集合成員都有一個簡單的鍵,並且這些簡單鍵設置爲過期(至少他可以這樣做)。 – Niloct