標籤:style blog http color 使用 strong 2014 div sp
一、鍵到期功能的相關命令
二、設定存留時間
Redis 提供了兩個命令來設定鍵的存留時間(TTL,time to live),它們分別是:
如果給定的鍵不存在,那麼 EXPIRE 和 PEXPIRE 將返回 0 ,表示設定失敗;如果命令返回 1 ,那麼表示設定成功。
當一個鍵被設定了存留時間之後,它的存留時間將會隨著時間的流逝而減少:時間過去一毫秒,鍵的存留時間就減少一毫秒;時間過去一秒鐘,鍵的存留時間就減少一秒鐘;以此類推。
當一個鍵的存留時間被減少至低於 0 時,Redis 就會自動將這個鍵刪除掉。
EXPIRE樣本:
redis> SET msg "hello world"OKredis> EXPIRE msg 5 # 設定存留時間(integer) 1redis> EXISTS msg # 仍然存在(integer) 1redis> EXISTS msg # 已被自動刪除(integer) 0
嚴格來說,設定存留時間為 5 ,會讓鍵存在 6 秒鐘。
PEXPIRE 樣本:
redis> PEXPIRE number 5500(integer) 1redis> EXISTS number(integer) 1redis> EXISTS number(integer) 0
注 1 :一秒鐘 = 1000 毫秒
注 2 :Redis 預設每 100 毫秒檢查一次鍵是否到期,所以上表也是以每 100 毫秒為單位列出的。
三、設定到期時間
Redis 提供了兩個命令用於設定鍵的到期時間(expire time):
如果給定的鍵不存在,那麼 EXPIREAT 和 PEXPIREAT 將返回 0 ,表示設定失敗;如果命令返回 1 ,那麼表示設定成功。
對於被設定了到期時間的鍵來說,當鍵的到期時間小於目前時間的時候,Redis 就會自動地刪除該鍵。
EXPIREAT 樣本:
redis> SET msg "time to go"OKredis> EXPIREAT msg 1000000005(integer) 1redis> EXISTS msg # 1000000005 之前(integer) 1redis> EXISTS msg # 1000000005 之後(integer) 0
PEXPIREAT 樣本:
redis> SET song "Last Night, Good Night"OKredis> PEXPIREAT song 1000000005500(integer) 1redis> EXISTS song # 1000000005500 之前(integer) 1redis> EXISTS song # 1000000005500 之後(integer) 0
四、存留時間和到期時間的區別
設定存留時間和設定到期時間都可以讓 Redis 自動刪除指定的鍵,它們的區別在於設定“鍵什麼時候要被刪除”的方式不同:
EXPIRE 和 PEXIRE 的作用是讓鍵在 N 秒鐘或者 N 毫秒之後被刪除。
EXPIREAT 和 PEXPIREAT 的作用則是讓鍵在指定的 UNIX 時間到達之後被刪除。
帶有存留時間的鍵就像是一個倒計時器,它會倒數 5、4、3、2、1、0,然後被刪掉。
而帶有到期時間的鍵則像是一個定時器,它會在指定的時間來臨之後被刪掉。
五、返回鍵的剩餘存留時間
在為一個鍵設定到期時間或者存留時間之後,使用者可以使用 TTL 命令或者 PTTL 命令查看這個鍵的剩餘存留時間,以此來獲知鍵還有多久才會被 Redis 刪除:
TTL 和 PTTL 可能會返回三種不同的值:
TTL 和 PTTL 樣本:
redis> SET msg "hello"OKredis> EXPIRE msg 10086(integer) 1redis> TTL msg(integer) 10083redis> PTTL msg(integer) 10079336
redis> SET number 10086OKredis> EXPIREAT number 1408498480(integer) 1redis> TTL number # 距離 14...80 的秒數(integer) 15redis> PTTL number # 距離 14...80 的毫秒數(integer) 11651
注意:Redis 並沒有提供查看鍵的到期時間的命令,所以對於一個設定了到期時間的鍵來說,我們只能使用TTL 和 PTTL 來查看它的剩餘存留時間。
六、移除鍵的到期時間或存留時間
PERSIST key
移除為鍵 key 設定的到期時間或存留時間,使得它不會被 Redis 自動刪除。
移除成功時命令返回 1 ;如果命令沒有設定到期時間或存留時間,那麼命令返回 0 。
PERSIST樣本:
redis> SET msg "hello"OKredis> EXPIRE msg 30(integer) 1redis> TTL msg(integer) 28redis> PERSIST msg(integer) 1redis> TTL msg(integer) -1
redis> SET number 10086OKredis> EXPIREAT number 1408499100(integer) 1redis> TTL number(integer) 25redis> PERSIST number(integer) 1redis> TTL number(integer) -1
Redis附加功能之鍵到期功能