Redis 過期策略與原始碼分析

2021-10-25 08:31:04 字數 909 閱讀 7404

在 redis 中我們可以給一些元素設定過期時間,那當它過期之後 redis 是如何處理這些過期鍵呢?

redis 之所以能知道那些鍵值過期,是因為在 redis 中維護了乙個字典,儲存了所有設定了過期時間的鍵值,我們稱之為過期字典。

過期鍵判斷流程如下圖所示:

過期鍵儲存在 redisdb 結構中,源**在 src/server.h 檔案中:

/* redis database representation. there are multiple databases identified

* by integers from 0 (the default database) up to the max configured

* database. the database number is the 'id' field in the structure. */

typedef struct redisdb {

dict *dict; /* 資料庫鍵空間,存放著所有的鍵值對 */

dict *expires; /* 鍵的過期時間 */

dict *blocking_keys; /* keys with clients waiting for data (blpop)*/

dict *ready_keys; /* blocked keys that received a push */

dict *watched_keys; /* watched keys for multi/exec cas */

redis過期策略

1 noeviction 一旦記憶體滿則返回錯誤 2 allkeys lru 對所有的key進行lru 3 volatile lru 只對設定了過期的key進行lru 預設的方式 4 allkeys random 隨機剔除乙個key 5 volatile random 對設定過期的key進行隨機剔除...

Redis過期策略

1,設定過期時間 expire key time 單位為秒 setex string key,int seconds,string value 字串獨有的方式 注意 過期key的判定 檢查給定key是否存在於過期字典,如果存在,那麼取得key的過期時間。檢查當前unix時間戳是否大於key的過期時間...

Redis 過期策略

redis 缺省會每秒進行十次過期掃瞄,過期掃瞄不會遍歷過期字典中所有的 key,而是採用了一種簡單的貪心策略。從過期字典中隨機 20 個 key 刪除這 20 個 key 中已經過期的 key 如果過期的 key 比率超過 1 4,那就重複步驟 1 同時,為了保證過期掃瞄不會出現迴圈過度,導致執行...