Redis 的過期策略和內(nèi)存淘汰機制

Redis 如何處理過期數(shù)據(jù)的

對于已經(jīng)過期的數(shù)據(jù)磁餐,Redis 將使用兩種策略來刪除這些過期鍵按咒,它們分別是惰性刪除和定期刪除瞳筏。

惰性刪除

惰性刪除是指 Redis 服務(wù)器不主動刪除過期的鍵值妻献,而是當(dāng)訪問鍵值時,再檢查當(dāng)前的鍵值是否過期抓半,如果過期則執(zhí)行刪除并返回 null 給客戶端;如果沒過期則正常返回值信息給客戶端格嘁。

它的優(yōu)點是不會浪費太多的系統(tǒng)資源笛求,只是在每次訪問時才檢查鍵值是否過期。缺點是刪除過期鍵不及時糕簿,造成了一定的空間浪費探入。

定期刪除

定期刪除是指 Redis 服務(wù)器每隔一段時間會檢查一下數(shù)據(jù)庫,看看是否有過期鍵可以被清除懂诗。

默認(rèn)情況下 Redis 定期檢查的頻率是每秒掃描 10 次蜂嗽,用于定期清除過期鍵。當(dāng)然此值還可以通過配置文件進(jìn)行設(shè)置殃恒,在 redis.conf 中修改配置“hz”即可植旧,默認(rèn)的值為“hz 10”。

定期刪除的掃描并不是遍歷所有的鍵值對芋类,這樣的話比較費時且太消耗系統(tǒng)資源隆嗅。Redis 服務(wù)器采用的是隨機抽取形式,每次從過期字典中侯繁,取出 20 個鍵進(jìn)行過期檢測胖喳,過期字典中存儲的是所有設(shè)置了過期時間的鍵值對。如果這批隨機檢查的數(shù)據(jù)中有 25% 的比例過期贮竟,那么會再抽取 20 個隨機鍵值進(jìn)行檢測和刪除丽焊,并且會循環(huán)執(zhí)行這個流程,直到抽取的這批數(shù)據(jù)中過期鍵值小于 25%咕别,此次檢測才算完成技健。

Redis 內(nèi)存淘汰策略

內(nèi)存淘汰算法主要包含兩種:LRU 淘汰算法和 LFU 淘汰算法。
LRU( Least Recently Used惰拱,最近最少使用)淘汰算法:是一種常用的頁面置換算法雌贱,也就是說最久沒有使用的緩存將會被淘汰。

LRU 是基于鏈表結(jié)構(gòu)實現(xiàn)的偿短,鏈表中的元素按照操作順序從前往后排列欣孤,最新操作的鍵會被移動到表頭,當(dāng)需要進(jìn)行內(nèi)存淘汰時昔逗,只需要刪除鏈表尾部的元素即可降传。

LFU(Least Frequently Used,最不常用的)淘汰算法:最不常用的算法是根據(jù)總訪問次數(shù)來淘汰數(shù)據(jù)的勾怒,它的核心思想是“如果數(shù)據(jù)過去被訪問多次婆排,那么將來被訪問的頻率也更高”声旺。

LFU 相對來說比 LRU 更“智能”,因為它解決了使用頻率很低的緩存段只,只是最近被訪問了一次就不會被刪除的問題腮猖。如果是使用 LRU 類似這種情況數(shù)據(jù)是不會被刪除的,而使用 LFU 的話翼悴,這個數(shù)據(jù)就會被刪除缚够。

內(nèi)存淘汰和過期策略是完全不同的兩個概念,內(nèi)存淘汰策略是當(dāng)內(nèi)存不夠用時才會觸發(fā)的一種機制鹦赎,它在 Redis 4.0 之后提供了 8 種內(nèi)存淘汰策略谍椅,這些淘汰策略主要使用了近 LRU 淘汰算法和 LFU 淘汰算法。
LRU( Least Recently Used古话,最近最少使用)淘汰算法:是一種常用的頁面置換算法雏吭,也就是說最久沒有使用的緩存將會被淘汰。

noeviction:不淘汰任何數(shù)據(jù)陪踩,當(dāng)內(nèi)存不足時杖们,執(zhí)行緩存新增操作會報錯,它是 Redis 默認(rèn)內(nèi)存淘汰策略肩狂。
allkeys-lru:淘汰整個鍵值中最久未使用的鍵值摘完。
allkeys-random:隨機淘汰任意鍵值。
volatile-lru:淘汰所有設(shè)置了過期時間的鍵值中最久未使用的鍵值傻谁。
volatile-random:隨機淘汰設(shè)置了過期時間的任意鍵值孝治。
volatile-ttl:優(yōu)先淘汰更早過期的鍵值。
volatile-lfu审磁,淘汰所有設(shè)置了過期時間的鍵值中最少使用的鍵值谈飒。
allkeys-lfu,淘汰整個鍵值中最少使用的鍵值态蒂。

可以使用 config get maxmemory-policy 命令杭措,來查看當(dāng)前 Redis 的內(nèi)存淘汰策略

內(nèi)存淘汰策略可以通過配置文件來修改,redis.conf 對應(yīng)的配置項是“maxmemory-policy noeviction”钾恢,只需要把它修改成我們需要設(shè)置的類型即可手素。

需要注意的是,如果使用修改 redis.conf 的方式瘩蚪,當(dāng)設(shè)置完成之后需要重啟 Redis 服務(wù)器才能生效刑桑。

還有另一種簡單的修改內(nèi)存淘汰策略的方式,我們可以使用命令行工具輸入“config set maxmemory-policy noeviction”來修改內(nèi)存淘汰的策略募舟,這種修改方式的好處是執(zhí)行成功之后就會生效,無需重啟 Redis 服務(wù)器闻察。但它的壞處是不能持久化內(nèi)存淘汰策略拱礁,每次重啟 Redis 服務(wù)器之后設(shè)置的內(nèi)存淘汰策略就會丟失琢锋。

Redis 內(nèi)存淘汰策略使用了 LFU 和近 LRU 的淘汰算法,具體使用哪種淘汰算法呢灶,要看服務(wù)器是如何設(shè)置內(nèi)存淘汰策略的吴超,也就是要看“maxmemory-policy”的值是如何設(shè)置的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鸯乃,一起剝皮案震驚了整個濱河市鲸阻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缨睡,老刑警劉巖鸟悴,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奖年,居然都是意外死亡细诸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門陋守,熙熙樓的掌柜王于貴愁眉苦臉地迎上來震贵,“玉大人,你說我怎么就攤上這事水评⌒上担” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵中燥,是天一觀的道長寇甸。 經(jīng)常有香客問我,道長褪那,這世上最難降的妖魔是什么幽纷? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮博敬,結(jié)果婚禮上友浸,老公的妹妹穿的比我還像新娘。我一直安慰自己偏窝,他們只是感情好收恢,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著祭往,像睡著了一般伦意。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上硼补,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天驮肉,我揣著相機與錄音,去河邊找鬼已骇。 笑死离钝,一個胖子當(dāng)著我的面吹牛票编,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播卵渴,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼慧域,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了浪读?” 一聲冷哼從身側(cè)響起昔榴,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碘橘,沒想到半個月后互订,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡蛹屿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年屁奏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片错负。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡坟瓢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出犹撒,到底是詐尸還是另有隱情折联,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布识颊,位于F島的核電站诚镰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏祥款。R本人自食惡果不足惜清笨,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刃跛。 院中可真熱鬧抠艾,春花似錦、人聲如沸桨昙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蛙酪。三九已至齐苛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桂塞,已是汗流浹背凹蜂。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人玛痊。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓泥彤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親卿啡。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容