edis數(shù)據(jù)庫
默認16個數(shù)據(jù)庫,每個數(shù)據(jù)庫由一個redis.h/redisDb結(jié)構(gòu)表示,此結(jié)構(gòu)里的dict字典與expires字典,其中dict保存了該庫所有鍵值對,此字典即為鍵空間;expires字典保存了數(shù)據(jù)庫中所有鍵的過期時間,該字典的鍵為指向鍵空間中的某鍵對象,值為long long 類型的整數(shù)表示的過期unix時間戳。
對鍵空間進行操作時還有額外的一些操作:
更新命中或不命中次數(shù);
更新LRU(最后一次使用)時間;
判斷鍵是否過期,若過期則先刪除此鍵然后在執(zhí)行其他操作;
如果有watch命令監(jiān)視此鍵,則將此鍵標識為dirty讓應用程序注意到;
修改鍵對dirty計數(shù)器+1以觸發(fā)持久化及復制操作;
發(fā)送可能的數(shù)據(jù)庫通知
redis使用惰性刪除與定期刪除配合策略
惰性刪除:只在取鍵是判斷是否刪除,對CPU友好對內(nèi)存不友好;
定期刪除:每隔一定時間執(zhí)行一次,且限制執(zhí)行的時長和頻率,多次遍歷各庫,隨機檢查過期時間并刪除
RDB持久化模式對過期的鍵處理:
生成rdb文件時已過期的鍵不會保存到文件里;
載入時如果當前服務器已主服務器模式運行,則忽略過期鍵,如果從服務器模式則不論過期都載入然后等待與主服務器同步到已過期的鍵。
AOF持久化模式對過期鍵的處理: