Redis 過期鍵的設置、獲取和刪除過期時間
默認情況下鍵是沒有生存時間的,也就是永不過期,除非清空內存。
設置的鍵的生存時間也很容易,可以通過4個命令設置(任選一即可):EXPIRE、PEXPIRE、EXPIREAT、PEXPIREAT命令,這4個命令看起來不同但是背后實現原理都是一樣的。常用的其實就是EXPIRE和PEXPIRE這兩個,前者是以秒設置過期時間,后者是以毫秒。
| 命令 | 說明 |
|---|---|
| EXPIRE key #s | 將KEY的生存時間設置為#秒 |
| PEXPIRE key #ms | 將KEY的生存時間設置為#毫秒 |
| EXPIREAT key timestamp | 將KEY的生存時間設置為UNIX時間戳,單位為秒 |
| PEXPIREAT key timestamp | 將KEY的生存時間設置為UNIX時間戳,單位為毫秒 |
上面這4個命令只是單位和表現形式上的不同,但實際上EXPIRE、PEXPIRE以及EXPIREAT命令的執行最后都會使用PEXPIREAT來實行。
比如使用EXPIRE來設置KEY的生存時間為N秒,那么后臺是如何運行的呢:
它會調用PEXPIRE命令把N秒轉換為M毫秒
然后獲取當前的UNIX時間單位也是毫秒
給鍵設置了過期時間,這個時間保存在一個字典里,也是鍵值結構,鍵是一個指針,指向真實的鍵,而值這是一個長整型的UNIX時間。
以秒來設置,設置aaa這個鍵1秒后過期,10秒中以后再獲取aaa這個鍵則返回空。
192.168.20.66:7000> set aaa 123
-> Redirected to slot [10439] located at 192.168.20.62:7000
OK
192.168.20.62:7000> get aaa
"123"
192.168.20.62:7000> expire aaa 10
(integer) 1
192.168.20.62:7000> ttl aaa
(integer) 7
192.168.20.62:7000> ttl aaa
(integer) 3
192.168.20.62:7000> ttl aaa
(integer) -2
192.168.20.62:7000> get aaa
(nil)
以毫秒來設置,設置bbb這個鍵10000毫秒后過期。
192.168.20.62:7000> set bbb 898
-> Redirected to slot [5287] located at 192.168.20.65:7000
OK
192.168.20.65:7000> pexpire bbb 10000
(integer) 1
192.168.20.65:7000> ttl bbb
(integer) 6
192.168.20.65:7000> ttl bbb
(integer) 2
192.168.20.65:7000> ttl bbb
(integer) -2
192.168.20.65:7000> get bbb
(nil)
查看一個鍵的生存時間(以秒來顯示):
ttl key
另外還有一個命令是pttl key這個是以毫秒顯示。
過期時間返回值的說明
| seconds值 | 說明 |
| -2 | 過期且已刪除 |
| -1 | 沒有過期時間設置,即永不過期 |
| >0 | 表示距離過期還有多少秒或者毫秒 |
可以使用PERSIST命令移除一個鍵的過期時間:
192.168.20.65:7000> set aaa hello
-> Redirected to slot [10439] located at 192.168.20.62:7000
OK
192.168.20.62:7000> expire aaa 100
(integer) 1
192.168.20.62:7000> ttl aaa
(integer) 97
192.168.20.62:7000> persist aaa
(integer) 1
192.168.20.62:7000> ttl aaa
(integer) -1
192.168.20.62:7000> get aaa
"hello"
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。