在Redis 設定 Key 之後,針對一些短期用途的 key (驗證,限時單),可以透過設定過期時間,
設定key的存活時間。
SET key "值"
Redis 設定 key 過期時間的方式有以下幾種,返回1表示成功,返回0表示key不存在或設置失敗。
//於指定秒數後過期
EXPIRE key "seconds"
//於指定毫秒過期
PEXPIRE key "milliseconds"
//於指定的timestamp時間戳記(秒)後過期
EXPIREAT key "timestamp"
//於指定的timestamp時間戳記(毫秒)後過期
PEXPIREAT key "milliseconds-timestamp"
也可透過 SETEX
CVT2HUGO: 同時設定 key 及過期時間,等同於 SET + EXPIRE
SETEX key "seconds"
查看 key 過期時間的方式
// {-2: "Key 不存在或已過期", -1: "無過期時間", 數值:"表示剩餘存活秒數"}
TTL key
// {-2: "Key 不存在或已過期", -1: "無過期時間", 數值:"表示剩餘存活毫秒"}
PTTL key
清除過期時間,可以將原本設定過期時間,改為無過期
PERSIST key
清除過期Key 的原理
在Redis 基於性能考量,並不會對每一個過期的key做及時刪除,主要透過以下幾種方式來清除過期的key:
被動清除
當過期的 key 被訪問時,會將其從內存中刪除
主動刪除
在 Redis 持久化的過程,會在一定時間做持久化及清除內存。
在清除內存時,採用的是隨機取樣的方式來刪除過期的 key (預設為 100 個key)
此外,會檢查有設定過期的key是否超過一定比例(預設為 25%),若超過就會執行清除。
記憶體不足時,觸發清除行為
在記憶體不足時,會執行清除,但這時會根據redis設定的刪除策略來執行刪除。
清除的策略可透過 maxmemory-policy 來指定:
LRU 算法主要依據時間,採取"最近最少使用的key"
LFU 算法主要依據訪問率,採取"最不常使用的key"
-
volatile-lru 採用LRU算法刪除(針對設定過期時間的key)
-
allkeys-lru 採用LRU算法刪除key
-
volatile-lfu 採用LFU算法刪除(針對設定過期時間的key)
-
allkeys-lfu 採用LFU算法刪除key
-
volatile-random 隨機刪除(針對設定過期時間的key)
-
allkeys-random 隨機刪除key
-
volatile-ttl 刪除即將過期的key
-
noeviction 不刪除,直接返回錯誤(Redis預設)
如果刪除key仍發生內存不足,則會拋出錯誤。