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