一、過期策略
Redis中有兩種過期策略:惰性刪除和定期刪除。
惰性刪除:當一個key過期後,不會立即被刪除,而是等到下次被訪問時再被刪除。
定期刪除:Redis默認每100毫秒檢查一次有沒有過期的key,有則刪除。
二、過期時間查詢方法
Redis提供了兩種查詢過期時間的方法:PERSIST和TTL。
PERSIST:移除key的過期時間,使得該key永不過期。
redis> SET key1 "Hello" "OK" redis> EXPIRE key1 10 (integer) 1 redis> PERSIST key1 (integer) 1 redis> TTL key1 (integer) -1
TTL:返回key的剩餘生存時間,以秒為單位。
redis> TTL key1 (integer) 3
三、過期時間存儲方式
Redis中key的過期時間可以通過兩種方式存儲:expires字典和設置值的時候直接存儲時間。
expires字典:Redis使用一個字典來存儲所有的key及其過期時間,每個key對應一個hash表裡的鍵值對。
設置值的時候直接存儲時間:當設置一個key的過期時間時,Redis會在內部將它轉化為一個UNIX時間戳保存在key的過期時間屬性里。
四、過期時間的精度
Redis的精度是秒級別的,過期時間會向上取整。
redis> SET key2 "Hello" "OK" redis> EXPIRE key2 1.5 (integer) 1 redis> TTL key2 (integer) 2
五、降低過期檢查頻率
為了減少過期檢查的負擔,我們可以在服務器較忙時,通過修改服務器配置文件(redis.conf)來增加檢查過期時間的間隔,如下:
# 修改配置文件中的"hz"值,表示每秒鐘執行幾次任務。默認為10,我們可以改為5,減少過期時間檢查的頻率。 hz 5
六、設置過期時間的注意事項
在設置過期時間時,需要注意以下幾點:
1、不能為不存在的key設置過期時間。
2、過期時間不宜過長,比如設置10年的過期時間,可能造成服務器負荷過大。
3、不應該設置不同步的過期時間,比如:A的過期時間是10s,而在A中又存了一個B,B的過期時間是20s,這樣容易造成數據錯誤。
七、總結
Redis中的過期時間策略涉及到惰性刪除和定期刪除兩種策略,並且有PERSIST和TTL兩種查詢方法。過期時間的存儲方式有expires字典和設置值的時候直接存儲時間。同時,要注意過期時間的精度和設置過期時間的注意事項,以免造成服務器負擔過大或數據出錯。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/183619.html