EXPIRE key secondshtml
爲給定 key
設置生存時間,當 key
過時時(生存時間爲 0
),它會被自動刪除。python
在 Redis 中,帶有生存時間的 key
被稱爲『易失的』(volatile)。web
生存時間能夠經過使用 DEL 命令來刪除整個 key
來移除,或者被 SET 和 GETSET 命令覆寫(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) key
。spa
更新生存時間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
。
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),能夠用 INCR 和 RPUSH 命令在 Redis 中實現它:每當用戶閱覽一個網頁的時候,執行如下代碼:
MULTI
RPUSH pagewviews.user:<userid> http://.....
EXPIRE pagewviews.user:<userid> 60
EXEC
若是用戶中止閱覽超過 60 秒,那麼它的導航會話就會被清空,當用戶從新開始閱覽的時候,系統又會從新記錄導航會話,繼續進行物品推薦。