Redis命令參考【EXPIRE】

EXPIRE

EXPIRE key secondshtml

爲給定 key 設置生存時間,當 key 過時時(生存時間爲 0 ),它會被自動刪除。python

在 Redis 中,帶有生存時間的 key 被稱爲『易失的』(volatile)。web

生存時間能夠經過使用 DEL 命令來刪除整個 key 來移除,或者被 SETGETSET 命令覆寫(overwrite),這意味着,若是一個命令只是修改(alter)一個帶生存時間的 key 的值而不是用一個新的 key 值來代替(replace)它的話,那麼生存時間不會被改變。redis

好比說,對一個 key 執行 INCR 命令,對一個列表進行 LPUSH 命令,或者對一個哈希表執行 HSET 命令,這類操做都不會修改 key 自己的生存時間。session

另外一方面,若是使用 RENAME 對一個 key 進行更名,那麼更名後的 key 的生存時間和更名前同樣。app

RENAME 命令的另外一種多是,嘗試將一個帶生存時間的 key 更名成另外一個帶生存時間的 another_key ,這時舊的 another_key (以及它的生存時間)會被刪除,而後舊的 key 會更名爲 another_key ,所以,新的 another_key 的生存時間也和本來的 key 同樣。google

使用 PERSIST 命令能夠在不刪除 key 的狀況下,移除 key 的生存時間,讓 key 從新成爲一個『持久的』(persistent) keyspa

更新生存時間code

能夠對一個已經帶有生存時間的 key 執行 EXPIRE 命令,新指定的生存時間會取代舊的生存時間。htm

過時時間的精確度

在 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"
OK

redis> EXPIRE cache_page 30  # 設置過時時間爲 30 秒
(integer) 1

redis> TTL cache_page    # 查看剩餘生存時間
(integer) 23

redis> EXPIRE cache_page 30000   # 更新過時時間
(integer) 1

redis> TTL cache_page
(integer) 29996

模式:導航會話

假設你有一項 web 服務,打算根據用戶最近訪問的 N 個頁面來進行物品推薦,而且假設用戶中止閱覽超過 60 秒,那麼就清空閱覽記錄(爲了減小物品推薦的計算量,而且保持推薦物品的新鮮度)。

這些最近訪問的頁面記錄,咱們稱之爲『導航會話』(Navigation session),能夠用 INCRRPUSH 命令在 Redis 中實現它:每當用戶閱覽一個網頁的時候,執行如下代碼:

MULTI
    RPUSH pagewviews.user:<userid> http://.....
    EXPIRE pagewviews.user:<userid> 60
EXEC

若是用戶中止閱覽超過 60 秒,那麼它的導航會話就會被清空,當用戶從新開始閱覽的時候,系統又會從新記錄導航會話,繼續進行物品推薦。

 

連接:http://redisdoc.com/key/expire.html

相關文章
相關標籤/搜索