Redis的EXPIRE過期機制介紹


概述
在實際開發過程中經常會遇到一些有時效性數據,比如限時優惠活動,緩存或者驗證碼之類的。過了一段時間就需要刪除這些數據。在關系型數據庫中一般都要增加一個字段記錄數據的到期時間,然后周期性地檢查過期數據然后刪除。Redis本身就對鍵過期提供了很好的支持。

Redis過期機制
在Redis中可以使用EXPIRE命令設置一個鍵的存活時間(ttl: time to live),過了這段時間,該鍵就會自動被刪除,EXPIRE命令的使用方法如下:
EXPIRE key ttl(單位秒)
命令返回1表示設置ttl成功,返回0表示鍵不存在或者設置失敗。

舉個例子:
127.0.0.1:6379> set session 100
OK
127.0.0.1:6379> EXPIRE session 5
(integer) 1
127.0.0.1:6379> get session
"100"
127.0.0.1:6379> get session
"100"
127.0.0.1:6379> get session
(nil)
127.0.0.1:6379>
上例可見,先設置session的值為100,然后設置他的ttl為5s,之后連續幾次使用get命令獲取session,5s之后將獲取不到session,因為ttl時間已到,session被刪除。

如果想知道一個鍵還有多長時間被刪除,則可以使用TTL命令查看,使用方法如下:
TTL key
返回值是鍵的剩余時間,單位秒。
比如:
127.0.0.1:6379> set session 100
OK
127.0.0.1:6379> EXPIRE session 10
(integer) 1
127.0.0.1:6379> TTL session
(integer) 7
127.0.0.1:6379> TTL session
(integer) 5
127.0.0.1:6379> TTL session
(integer) 2
127.0.0.1:6379> TTL session
(integer) 0
127.0.0.1:6379> TTL session
(integer) -2
127.0.0.1:6379> TTL session
(integer) -2
127.0.0.1:6379>
可見,TTL的返回值會隨着時間的流逝慢慢減少,10s之后鍵會被刪除,鍵不存在時TTL會返回-2,當沒有為鍵設置過期時間時,使用TTL獲取鍵的剩余時間將會返回-1,比如
127.0.0.1:6379> set url http://qifuguang.me
OK
127.0.0.1:6379> ttl url
(integer) -1
127.0.0.1:6379>

如果想取消某個鍵的過期時間,可以使用PERSIST命令,用法如下:
PERSIST key
清除成功返回1,失敗返回0.

例如:
127.0.0.1:6379> set title winwill2012
OK
127.0.0.1:6379> EXPIRE title 100
(integer) 1
127.0.0.1:6379> ttl title
(integer) 97
127.0.0.1:6379> PERSIST title
(integer) 1
127.0.0.1:6379> ttl title
(integer) -1
127.0.0.1:6379>


除了PERSIST命令會清除鍵的過期時間之外,SET,GETSET命令也能清除鍵的過期時間,但是只對鍵進行操作的命令(比如INCR,LPUSH等等)不會清除鍵的過期時間。
EXPIRE命令的單位是秒,如果想要更精確的過期時間,則可以使用PEXPIRE命令,該命令的單位是毫秒,相應地可以使用PTTL看剩余時間。
如果WATCH命令監控了一個具有過期時間的鍵,如果監控期間這個鍵過期被自動刪除,WATCH並不認為該鍵被改變


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM