2014-06-30 45 views
2

我使用REDIS來存儲數據(字符串)。 ex: 鑰匙「s1」商店價值「hello world」。 鍵「s2」存儲值「再見」。 我希望s1在5分鐘後自動過期(空閒內存),但s2永不過期。我使用C#,.net 4.0 >>如何編碼? 謝謝REDIS的耐用性?如何自動過期數據?

回答

2

有關EXPIRE的文檔允許您設置每個鍵的EXPIRE值,以秒爲單位。

EXPIRE s1 300 

將在5分鐘內過期關鍵s1。

在這裏看到的文檔:REDIS EXPIRE

如果您正在尋找C#代碼,我認爲這將取決於你使用的訪問Redis的什麼庫。 還有一些其他的做題,可以幫助,但也討論了在那裏到期沒有工作的問題:Redis Expire does not work

+0

甚至更​​好 - 使用SET內置的EX指令,即:SET s1「hello world」EX 300 –

1

默認的Redis不會過期鍵,它設置過期時間爲-1,「S2」時間unilimited除非你設置它。

正常情況下,Redis鍵創建時沒有關聯的生存時間。 關鍵只是永遠活着,除非用戶以明確的方式刪除它,例如使用DEL命令。
EXPIRE系列命令能夠將過期關聯到給定密鑰,其代價是密鑰使用的一些額外內存的成本 。如果密鑰的有效期爲 ,Redis將確保在指定金額 時間過去後移除該密鑰。

http://redis.io/commands/expire(再次)

+0

哇,永遠很長時間:-)必須有一種方法來清理充滿「舊」鍵(但也是活動的)?即追溯設定默認的到期時間跨度? – GGleGrand

+0

當然,這將是一個簡單的循環。遍歷所有密鑰,檢查每個密鑰的TTL,併爲ttl爲-1的每個密鑰設置你的EXPIRE。完成。 – SFEley

2

對於我的情況與Redis的Azure的,我一直在尋找,只是保證我沒有讓我的縮放服務無用的數據。我發現maxmemory LRU/FIFO似乎達到這個目的:

http://redis.io/topics/lru-cache

在Redis的Azure中,一個可以在Maxmemory策略設置爲任何的管理門戶允許LRU方案。

3

如果你打算使用Redis的只是作爲一個高速緩存,每一個鍵都會有一個到期集,您可以考慮使用以下配置,而不是(假設2兆字節最大內存限制爲例):

maxmemory 2mb 
maxmemory-policy allkeys-lru 

在這種配置中,應用程序不需要使用EXPIRE命令(或等效命令)設置密鑰的生存時間,因爲只要我們達到2兆內存限制,所有密鑰都將使用近似的LRU算法逐出。

基本上在這個配置中,Redis的行爲與memcached類似。我們有更多關於使用Redis作爲LRU緩存的文檔。