redis中的key設置過期時間


EXPIRE key seconds

為給定  key  設置生存時間,當  key  過期時(生存時間為  0  ),它會被自動刪除。

在 Redis 中,帶有生存時間的  key  被稱為『易失的』(volatile)。

生存時間可以通過使用 DEL 命令來刪除整個  key  來移除,或者被 SET 和 GETSET 命令覆寫(overwrite),這意味着,如果一個命令只是修改(alter)一個帶生存時間的  key  的值而不是用一個新的  key  值來代替(replace)它的話,那么生存時間不會被改變。

比如說,對一個  key  執行 INCR 命令,對一個列表進行 LPUSH 命令,或者對一個哈希表執行 HSET 命令,這類操作都不會修改  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

1. 在小於2.1.3的redis版本里,只能對key設置一次expire。redis2.1.3和之后的版本里,可以多次對key使用expire命令,更新key的expire time。 
2. redis術語里面,把設置了expire time的key 叫做:volatile keys。 意思就是不穩定的key。

3. 如果對key使用set或del命令,那么也會移除expire time。尤其是set命令,這個在編寫程序的時候需要注意一下。 
4. redis2.1.3之前的老版本里,如果對volatile keys 做相關寫入操作(LPUSH,LSET),和其他一些觸發修改value的操作時,redis會刪除 該key。 也就是說 :

redis.expire(key,expiration);

redis.lpush(key,field,value);

redis.get(key) //return null

redis2.1.3之后的版本里面沒有這個約束,可以任意修改。

redis.set(key,100);

redis.expire(key,expiration);

redis.incr(key)

redis.get(key)

//redis2.2.2 return 101; redis<2.1.3 return 1; 
5. redis對過期鍵采用了lazy expiration:在訪問key的時候判定key是否過期,如果過期,則進行過期處理。其次,每秒對volatile keys 進行抽樣測試,如果有過期鍵,那么對所有過期key進行處理。


免責聲明!

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



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