數(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,所有對鍵的讀寫操作進行前都需要調(diào)用這個方法進行檢查。若已過則清除鍵。
定期刪除
redis過期鍵定期刪除策略定義在redis.c/activeExpireCycle,每當redis周期性執(zhí)行redis.c/serverCron的時候,都會執(zhí)行。它在指定時間內(nèi),分批遍歷各個數(shù)據(jù)庫,從expires中隨機檢查一部分鍵做過期檢查。
RDB
rdb文件生成和加載時會過濾掉已過期的鍵