【75期】面試官:說說Redis的過期鍵刪除策略吧!(高頻)
閱讀本文大概需要 5 分鐘。
劃重點(diǎn):Redis的過期鍵刪除策略也是面試中經(jīng)常會(huì)被問的,我最近面試,被問到了好幾次。
1. 常見的刪除策略
定時(shí)刪除
惰性刪除
定期刪除
1.1 定時(shí)刪除策略
優(yōu)點(diǎn):對(duì)內(nèi)存非常友好
缺點(diǎn):對(duì)CPU時(shí)間非常不友好
1.2 惰性刪除策略
優(yōu)點(diǎn):對(duì)CPU時(shí)間非常友好
缺點(diǎn):對(duì)內(nèi)存非常不友好
1.3 定期刪除策略
2. Redis使用的過期鍵刪除策略
2.1 惰性刪除策略的實(shí)現(xiàn)
如果輸入鍵已經(jīng)過期,那么將輸入鍵從數(shù)據(jù)庫(kù)中刪除
如果輸入鍵未過期,那么不做任何處理

2.2 定期刪除策略的實(shí)現(xiàn)
函數(shù)每次運(yùn)行時(shí),都從一定數(shù)量的數(shù)據(jù)庫(kù)中隨機(jī)取出一定數(shù)量的鍵進(jìn)行檢查,并刪除其中的過期鍵,比如先從0號(hào)數(shù)據(jù)庫(kù)開始檢查,下次函數(shù)運(yùn)行時(shí),可能就是從1號(hào)數(shù)據(jù)庫(kù)開始檢查,直到15號(hào)數(shù)據(jù)庫(kù)檢查完畢,又重新從0號(hào)數(shù)據(jù)庫(kù)開始檢查,這樣可以保證每個(gè)數(shù)據(jù)庫(kù)都被檢查到。
3. RDB對(duì)過期鍵的處理
3.1 生成RDB文件
3.2 載入RDB文件
如果服務(wù)器以主服務(wù)器模式運(yùn)行,在載入RDB文件時(shí),程序會(huì)對(duì)文件中保存的鍵進(jìn)行檢查,未過期的鍵會(huì)被載入到數(shù)據(jù)庫(kù)中,過期鍵會(huì)被忽略。
如果服務(wù)器以從服務(wù)器模式運(yùn)行,在載入RDB文件時(shí),文件中保存的所有鍵,不論是否過期,都會(huì)被載入到數(shù)據(jù)庫(kù)中。
4. AOF對(duì)過期鍵的處理
4.1 AOF文件寫入
從數(shù)據(jù)庫(kù)中刪除message鍵
追加一條DEL message命令到AOF文件
-向執(zhí)行GET message命令的客戶端返回空回復(fù)
4.2 AOF文件重寫
5. 復(fù)制功能對(duì)過期鍵的處理
主服務(wù)器在刪除一個(gè)過期鍵后,會(huì)顯式地向所有從服務(wù)器發(fā)送一個(gè)DEL命令,告知從服務(wù)器刪除這個(gè)過期鍵。
從服務(wù)器在執(zhí)行客戶端發(fā)送的讀命令時(shí),即使發(fā)現(xiàn)該鍵已過期也不會(huì)刪除該鍵,照常返回該鍵的值。
從服務(wù)器只有接收到主服務(wù)器發(fā)送的DEL命令后,才會(huì)刪除過期鍵。
推薦閱讀:
【74期】面試官:對(duì)多線程熟悉嗎,來談?wù)劸€程池的好處?
【73期】面試官:Spring 和 Spring Boot 的區(qū)別是什么?
【72期】面試官:對(duì)并發(fā)熟悉嗎?說一下synchronized與Lock的區(qū)別與使用
微信掃描二維碼,關(guān)注我的公眾號(hào)
朕已閱?

