Redis學習手冊11—自動過期

前言

隨着時間推移,Redis中會出現越來越多的數據,有的數據可能使用頻率比較低,但是這些數據一直佔用着內存資源,爲了提高資源利用率,將一些無用的數據或者使用頻率較低的數據移出Redis數據庫,Redis提供了自動的鍵過期功能,通過這個功能,用戶可以讓特定的鍵在指定的時間之後自動被移除,從而避免了無用數據長期佔用資源的問題發生。

EXPIRE、PEXPIRE:設置生存時間

用戶可以通過執行EXPIRE命令或者PEXPIRE命令爲鍵設置一個生存時間(Time To Live,TTL):鍵的生存時間在設置之後流會隨着時間的流逝而不斷減少,當一個鍵的生存時間被消耗殆盡時,Redis就會移除這個鍵。

EXPIRE命令和PEXPIRE命令都可以用來設置生存時間,它們的區別在於時間精度上,前者設置的時間精度爲秒,後者的設置的時間精度爲毫秒:

EXPIRE key seconds
PEXPIRE key milliseconds

它們的含義時:在指定 NN 秒或者毫秒之後自動被移除。

如果設置成功,則返回1,如果指定的鍵不存在,那麼返回0表示設置失敗。

當用戶對一個已經生成時間的鍵執行EXPIRE命令或者PEXPIRE命令時,鍵原有的生成時間會被移除,然後重新設置新的生存時間。

SET命令的EX選項和PX選項

Redis從2.6.12版本開始爲SET命令提供了EXPX選項,用戶可以通過使用這兩個選項來達到同時執行SET和設置生存時間的效果:

SET key value [EX seconds] [PX millseconds]

組合命令的使用不僅可以減少Redis執行命令的次數,同時,由於Redis執行命令的原子性,使用組合鍵還可以保證設置值和生成時間同時進行,保證了命令的執行的安全性。

EXPIREAT、PEXPIREAT:設置過期時間

Redis不僅提供了設置生存時間來讓鍵在指定的秒數或毫秒數之後自動移除,還可以通過設置過期時間(Expire Time),讓Redis在指定UNIX時間來臨之後自動移除給定的鍵:

EXPIREAT key seconds_timestamp
PEXPIREAT key millseconds_timestamp

EXPIREAT命令和PEXPIREAT命令的區別也是精度上的,前者是秒級精度,後者是毫秒級精度。同樣的,如果對已有設置過期時間的鍵執行這兩個命令,那麼就會重新爲該鍵設置新的過期時間。

注意:無論是EXPIRE/PEXPIRE,還是EXPIREAT/PEXPIREAT,它們都只能對整個鍵進行設置,而無法對鍵中的某個元素進行設置。

複雜度:O(1)O(1)
版本要求:EXPIREAT命令從Redis 1.2.0版本開始可用,PEXPIREAT命令從Redis 2.6.0版本開始可用。

TTL、PTTL:獲取鍵的剩餘生存時間

在爲鍵設置生存時間或過期時間之後,用戶可以使用TTL命令或PTTL命令查看鍵的剩餘生存時間,即鍵還有多久會被移除:

TTL key -- 返回秒級精度的時間
PTTL key -- 返回毫秒級精度的時間

如果給定的鍵存在,但是並沒有設置生存時間或者過期時間,那麼命令會返回 -1 。

注意:在使用 TTL 命令時,有時會與遇到返回0的情況,出現這種情況的原因在於 TTL 的精度只能返回秒級精度的時間,所以當給定的鍵剩餘生存時間不足 1s 時,TTL命令就會返回0,這時使用 PTTL命令就會看到實際的剩餘生存時間

複雜度:O(1)O(1)
版本要求:TTL命令從Redis 1.0.0版本開始可用,PTTL命令從Redis 2.6.0版本開始可用。

上一篇:Redis學習手冊10—數據庫操作

下一篇:Redis學習手冊12—流水線與事務

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章