數(shù)據(jù)庫對象定義如下:
struct redisServer {
// ...
int dbnum; // 數(shù)據(jù)庫數(shù)量
redisDb *db; // 數(shù)組保存redis中所有db
// ...
}
redisDb定義如下:
typedef struct redisDb {
// ...
dict *dict; // 數(shù)據(jù)庫鍵空間裙顽,保存所有鍵值對
// ...
}
過期鍵刪除
惰性刪除
redis過期鍵惰性刪除策略定義在db.c/expireIfNeeded
,所有對鍵的讀寫操作進行前都需要調用這個方法進行檢查宣谈。若已過則清除鍵愈犹。
定期刪除
redis過期鍵定期刪除策略定義在redis.c/activeExpireCycle
,每當redis周期性執(zhí)行redis.c/serverCron
的時候闻丑,都會執(zhí)行漩怎。它在指定時間內,分批遍歷各個數(shù)據(jù)庫梆掸,從expires
中隨機檢查一部分鍵做過期檢查扬卷。
RDB
rdb文件生成和加載時會過濾掉已過期的鍵