Redis過期實(shí)現(xiàn)原理是基于惰性刪除和定期刪除相結(jié)合的方式。
惰性刪除:當(dāng)訪問一個(gè)已過期的鍵時(shí),Redis會(huì)立即刪除該鍵,并返回空值。這種方式能夠確保鍵過期后不再被訪問到,但是會(huì)導(dǎo)致頻繁的內(nèi)存回收操作,對(duì)性能有一定影響。
定期刪除:Redis會(huì)每隔一段時(shí)間(默認(rèn)每秒鐘)隨機(jī)檢查一些鍵是否過期,如果發(fā)現(xiàn)過期鍵則立即刪除。為了避免一次性刪除過多過期鍵對(duì)性能造成影響,Redis會(huì)限制每次刪除的數(shù)量。
在定期刪除的基礎(chǔ)上,Redis還使用了一種叫做惰性刪除的策略。當(dāng)Redis執(zhí)行寫操作時(shí),會(huì)檢查鍵是否過期,如果過期則立即刪除。這樣可以避免過多的過期鍵堆積,并且能夠保證內(nèi)存的及時(shí)回收。
需要注意的是,Redis過期是有可能存在一定的誤差的。由于定期刪除和惰性刪除的策略,過期鍵并不是立即被刪除,而是在某個(gè)時(shí)刻被刪除。因此,如果對(duì)鍵的過期時(shí)間非常敏感的話,建議使用其他方式來實(shí)現(xiàn)。