標籤:
EXPIRE
EXPIRE key seconds
為給定 key 設定存留時間,當 key 到期時(存留時間為 0 ),它會被自動刪除。
在 Redis 中,帶有存留時間的 key 被稱為『易失的』(volatile)。
存留時間可以通過使用 DEL 命令來刪除整個 key 來移除,或者被 SET 和 GETSET 命令覆寫(overwrite),這意味著,如果一個命令只是修改(alter)一個帶存留時間的 key 的值而不是用一個新的 key 值來代替(replace)它的話,那麼存留時間不會被改變。
比如說,對一個 key 執行 INCR 命令,對一個列表進行 LPUSH 命令,或者對一個雜湊表執行 HSET 命令,這類操作都不會修改 key 本身的存留時間。
另一方面,如果使用 RENAME 對一個 key 進行改名,那麼改名後的 key 的存留時間和改名前一樣。
RENAME 命令的另一種可能是,嘗試將一個帶存留時間的 key 改名成另一個帶存留時間的 another_key ,這時舊的 another_key (以及它的存留時間)會被刪除,然後舊的 key 會改名為 another_key ,因此,新的 another_key 的存留時間也和原本的 key 一樣。
使用 PERSIST 命令可以在不刪除 key 的情況下,移除 key 的存留時間,讓 key 重新成為一個『持久的』(persistent) key 。
更新存留時間
可以對一個已經帶有存留時間的 key 執行 EXPIRE 命令,新指定的存留時間會取代舊的存留時間。
到期時間的精確度
在 Redis 2.4 版本中,到期時間的延遲在 1 秒鐘之內 —— 也即是,就算 key 已經到期,但它還是可能在到期之後一秒鐘之內被訪問到,而在新的 Redis 2.6 版本中,延遲被降低到 1 毫秒之內。
Redis 2.1.3 之前的不同之處
在 Redis 2.1.3 之前的版本中,修改一個帶有存留時間的 key 會導致整個 key 被刪除,這一行為是受當時複製(replication)層的限制而作出的,現在這一限制已經被修複。
-
可用版本:
-
>= 1.0.0
-
時間複雜度:
-
O(1)
-
傳回值:
-
設定成功返回
1 。當
key 不存在或者不能為
key 設定存留時間時(比如在低於 2.1.3 版本的 Redis 中你嘗試更新
key 的存留時間),返回
0 。
redis> SET cache_page "www.google.com"OKredis> EXPIRE cache_page 30 # 設定到期時間為 30 秒(integer) 1redis> TTL cache_page # 查看剩餘存留時間(integer) 23redis> EXPIRE cache_page 30000 # 更新到期時間(integer) 1redis> TTL cache_page(integer) 29996
模式:導航會話
假設你有一項 web 服務,打算根據使用者最近訪問的 N 個頁面來進行物品推薦,並且假設使用者停止閱覽超過 60 秒,那麼就清空閱覽記錄(為了減少物品推薦的計算量,並且保持推薦物品的新鮮度)。
這些最近訪問的頁面記錄,我們稱之為『導航會話』(Navigation session),可以用 INCR 和 RPUSH 命令在 Redis 中實現它:每當使用者閱覽一個網頁的時候,執行以下代碼:
MULTI RPUSH pagewviews.user:<userid> http://..... EXPIRE pagewviews.user:<userid> 60EXEC
如果使用者停止閱覽超過 60 秒,那麼它的導航會話就會被清空,當使用者重新開始閱覽的時候,系統又會重新記錄導航會話,繼續進行物品推薦。
連結:http://redisdoc.com/key/expire.html
Redis命令參考【EXPIRE】