Redis的內(nèi)存回收原理,及內(nèi)存過期淘汰策略詳解

Redis內(nèi)存回收機(jī)制

Redis的內(nèi)存回收主要圍繞以下兩個(gè)方面:

1.Redis過期策略:刪除過期時(shí)間的key值

2.Redis淘汰策略:內(nèi)存使用到達(dá)maxmemory上限時(shí)觸發(fā)內(nèi)存淘汰數(shù)據(jù)

Redis的過期策略和內(nèi)存淘汰策略不是一件事,實(shí)際研發(fā)中不要弄混淆了侧到,下面會(huì)完整的介紹兩者俗壹。

Redis過期策略

過期策略通常有以下三種:

1.定時(shí)過期

每個(gè)設(shè)置過期時(shí)間的key都需要?jiǎng)?chuàng)建一個(gè)定時(shí)器,到過期時(shí)間就會(huì)立即清除佛南。該策略可以立即清除過期的數(shù)據(jù),對內(nèi)存很友好嵌言;但是會(huì)占用大量的CPU資源去處理過期的數(shù)據(jù)嗅回,從而影響緩存的響應(yīng)時(shí)間和吞吐量。

2.惰性過期

只有當(dāng)訪問一個(gè)key時(shí)摧茴,才會(huì)判斷該key是否已過期绵载,過期則清除。該策略可以最大化地節(jié)省CPU資源苛白,卻對內(nèi)存非常不友好娃豹。極端情況可能出現(xiàn)大量的過期key沒有再次被訪問,從而不會(huì)被清除购裙,占用大量內(nèi)存懂版。

3.定期過期

每隔一定的時(shí)間,會(huì)掃描一定數(shù)量的數(shù)據(jù)庫的expires字典中一定數(shù)量的key躏率,并清除其中已過期的key躯畴。該策略是前兩者的一個(gè)折中方案民鼓。通過調(diào)整定時(shí)掃描的時(shí)間間隔和每次掃描的限定耗時(shí),可以在不同情況下使得CPU和內(nèi)存資源達(dá)到最優(yōu)的平衡效果私股。

Redis中同時(shí)使用了惰性過期和定期過期兩種過期策略摹察。

Redis淘汰策略

1.簡介

Redis的內(nèi)存淘汰策略,是指當(dāng)內(nèi)存使用達(dá)到maxmemory極限時(shí)倡鲸,需要使用LAU淘汰算法來決定清理掉哪些數(shù)據(jù)供嚎,以保證新數(shù)據(jù)的存入。

2峭状、LRU算法

Redis默認(rèn)情況下就是使用LRU策略算法克滴。

LRU算法(least RecentlyUsed),最近最少使用算法,也就是說默認(rèn)刪除最近最少使用的鍵。

但是一定要注意一點(diǎn)优床!redis中并不會(huì)準(zhǔn)確的刪除所有鍵中最近最少使用的鍵劝赔,而是隨機(jī)抽取3個(gè)鍵,刪除這三個(gè)鍵中最近最少使用的鍵胆敞。

那么3這個(gè)數(shù)字也是可以可以設(shè)置采樣的大小着帽,如果設(shè)置為10,那么效果會(huì)更好移层,不過也會(huì)耗費(fèi)更多的CPU資源仍翰。對應(yīng)位置是配置文件中的maxmeory-samples。

3.緩存清理配置

maxmemory用來設(shè)置redis存放數(shù)據(jù)的最大的內(nèi)存大小观话,一旦超出這個(gè)內(nèi)存大小之后予借,就會(huì)立即使用LRU算法清理掉部分?jǐn)?shù)據(jù)。

對于64 bit的機(jī)器频蛔,如果maxmemory設(shè)置為0灵迫,那么就默認(rèn)不限制內(nèi)存的使用,直到耗盡機(jī)器中所有的內(nèi)存為止;晦溪,但是對于32 bit的機(jī)器瀑粥,有一個(gè)隱式的閑置就是3GB

4.Redis數(shù)據(jù)淘汰策略

maxmemory-policy,可以設(shè)置內(nèi)存達(dá)到最大閑置后三圆,采取什么策略來處理狞换。

對應(yīng)的淘汰策略規(guī)則如下:

file

image.png

1)noeviction:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí),新寫入操作會(huì)報(bào)錯(cuò)嫌术。

2)allkeys-lru:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí)哀澈,在鍵空間中牌借,移除最近最少使用的key度气。

3)allkeys-random:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí),在鍵空間中膨报,隨機(jī)移除某個(gè)key磷籍。

4)volatile-lru:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí)适荣,在設(shè)置了過期時(shí)間的鍵空間中,移除最近最少使用的key院领。

5)volatile-random:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí)弛矛,在設(shè)置了過期時(shí)間的鍵空間中,隨機(jī)移除某個(gè)key比然。

6)volatile-ttl:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時(shí)丈氓,在設(shè)置了過期時(shí)間的鍵空間中,有更早過期時(shí)間的key優(yōu)先移除强法。

5.緩存清理的流程

1)客戶端執(zhí)行數(shù)據(jù)寫入操作

2)redis server接收到寫入操作之后万俗,檢查maxmemory的限制,如果超過了限制饮怯,那么就根據(jù)對應(yīng)的policy清理掉部分?jǐn)?shù)據(jù)

3)寫入操作完成執(zhí)行闰歪。

總結(jié)

redis的內(nèi)存淘汰策略用于處理內(nèi)存不足時(shí)的需要申請額外空間的數(shù)據(jù),內(nèi)存淘汰策略的選取并不會(huì)影響過期的key的處理蓖墅。過期策略用于處理過期的緩存數(shù)據(jù)库倘。

歡迎添加小編的Java學(xué)習(xí)群,不管你是小白還是大牛论矾,小編我都?xì)g迎教翩,不定期分享干貨,包括小編自己整理的一份2019年最新的Java資料和0基礎(chǔ)入門教程視頻拇囊,歡迎初學(xué)和進(jìn)階中的小伙伴迂曲。在不忙的時(shí)間我會(huì)給大家解惑

file

本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末寥袭,一起剝皮案震驚了整個(gè)濱河市路捧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌传黄,老刑警劉巖杰扫,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異膘掰,居然都是意外死亡章姓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門识埋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凡伊,“玉大人,你說我怎么就攤上這事窒舟∠得Γ” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵惠豺,是天一觀的道長银还。 經(jīng)常有香客問我风宁,道長,這世上最難降的妖魔是什么蛹疯? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任戒财,我火速辦了婚禮,結(jié)果婚禮上捺弦,老公的妹妹穿的比我還像新娘饮寞。我一直安慰自己,他們只是感情好列吼,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布骂际。 她就那樣靜靜地躺著,像睡著了一般冈欢。 火紅的嫁衣襯著肌膚如雪歉铝。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天凑耻,我揣著相機(jī)與錄音太示,去河邊找鬼。 笑死香浩,一個(gè)胖子當(dāng)著我的面吹牛类缤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播邻吭,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼餐弱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了囱晴?” 一聲冷哼從身側(cè)響起膏蚓,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎畸写,沒想到半個(gè)月后驮瞧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枯芬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年论笔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片千所。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狂魔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出淫痰,到底是詐尸還是另有隱情最楷,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站管嬉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏朗鸠。R本人自食惡果不足惜蚯撩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望烛占。 院中可真熱鬧胎挎,春花似錦、人聲如沸忆家。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芽卿。三九已至揭芍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卸例,已是汗流浹背称杨。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留筷转,地道東北人姑原。 一個(gè)月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像呜舒,于是被迫代替她去往敵國和親锭汛。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

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