Redis設定和更新Key的過期時間
EXPIRE key seconds
為給定 key
設定生存時間,當 key
過期時(生存時間為 0
),它會被自動刪除。
在 Redis 中,帶有生存時間的 key
被稱為『易失的』(volatile)。
生存時間可以通過使用 DEL 命令來刪除整個 key
來移除,或者被 SET 和 GETSET 命令覆寫(overwrite),這意味著,如果一個命令只是修改(alter)一個帶生存時間的 key
的值而不是用一個新的 key
值來代替(replace)它的話,那麼生存時間不會被改變。
比如說,對一個 key
執行 INCR 命令,對一個列表進行 LPUSH 命令,或者對一個雜湊表執行 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"
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