關(guān)于redis的幾件小事(四)redis的過期策略以及內(nèi)存淘汰機制

1.數(shù)據(jù)為什么會過期火诸?

首先躲查,要明白redis是用來做數(shù)據(jù)緩存的它浅,不是用來做數(shù)據(jù)存儲的(當(dāng)然也可以當(dāng)數(shù)據(jù)庫用),所以數(shù)據(jù)時候過期的镣煮,過期的數(shù)據(jù)就不見了姐霍,過期主要有兩種情況,
①在設(shè)置緩存數(shù)據(jù)時制定了過期時間,這樣到了過期時間數(shù)據(jù)就不見了镊折。
②redis的數(shù)據(jù)是存放在內(nèi)存中的胯府,而內(nèi)存是有限的,是不可能放過多數(shù)據(jù)的恨胚,比如只有10G的內(nèi)存骂因,想要向里面放入20G的數(shù)據(jù),那么就注定會有10G的數(shù)據(jù)會丟失赃泡。

2.redis的過期策略是什么樣的寒波?

redis采用了 “定期刪除+惰性刪除” 的過期策略。
①定期刪除
原理:定期刪除指的是redis默認(rèn)每隔100ms就隨機抽取一些設(shè)置了過期時間的key升熊,檢測這些key是否過期俄烁,如果過期了就將其刪掉。
為什么會選擇一部分僚碎,而不是全部:因為如果這是redis里面有大量的key都設(shè)置了過期時間猴娩,那么如果全部去檢測一遍,CPU負(fù)載就會很高勺阐,會浪費大量的時間在檢測上面卷中,甚至直接導(dǎo)致redis掛掉。所有只會抽取一部分而不會全部檢查渊抽。
出現(xiàn)問題:這樣的話就會出現(xiàn)大量的已經(jīng)過期的key并沒有被刪除蟆豫,這就是 為什么有時候大量的key明明已經(jīng)過了失效時間,但是redis的內(nèi)存還是被大量占用的原因 懒闷,為了解決這個問題十减,就需要 惰性刪除 這個策略了。

②惰性刪除
原理:惰性刪除不在是redis去主動刪除愤估,而是在你要獲取某個key 的時候帮辟,redis會先去檢測一下這個key是否已經(jīng)過期,如果沒有過期則返回給你玩焰,如果已經(jīng)過期了由驹,那么redis會刪除這個key,不會返回給你昔园。
這樣兩種策略就保證了 過期的key最終一定會被刪除掉 蔓榄,但是這只是保證了最終一定會被刪除,要是定時刪除漏掉了大量過期的key默刚,而且我們也沒有及時的去訪問這些key甥郑,那么這些key不就不會被刪除了嗎?不就會一直占著我們的內(nèi)存嗎?這樣不還是會導(dǎo)致redis內(nèi)存耗盡嗎荤西?
由于存在這樣的問題澜搅,所以redis引入了 內(nèi)存淘汰機制 來解決伍俘。

3.內(nèi)存淘汰機制

內(nèi)存淘汰機制就保證了在redis的內(nèi)存占用過多的時候,去進行內(nèi)存淘汰店展,也就是刪除一部分key养篓,保證redis的內(nèi)存占用率不會過高,那么它會刪除那些key呢赂蕴?
redis提供了6中內(nèi)存淘汰策略柳弄,我們可以去進行選擇,六中策略如下:
①noeviction:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時概说,新寫入操作會報錯碧注,無法寫入新數(shù)據(jù),一般不采用糖赔。
②allkeys-lru:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時萍丐,在鍵空間中,移除最近最少使用的key放典,這個是最常用的逝变。
③allkeys-random:當(dāng)內(nèi)存不足以容納新寫入的數(shù)據(jù)時,在鍵空間中奋构,隨機移除key壳影,一般也不使用。
④volatile-lru:volatile-lru:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時弥臼,在設(shè)置了過期時間的鍵空間中宴咧,移除最近最少使用的key(這個一般不太合適) 。
⑤volatile-random:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時径缅,在設(shè)置了過期時間的鍵空間中掺栅,隨機移除某個key 。
⑥volatile-ttl:當(dāng)內(nèi)存不足以容納新寫入數(shù)據(jù)時纳猪,在設(shè)置了過期時間的鍵空間中氧卧,有更早過期時間的key優(yōu)先移除。

4.手寫一個LRU算法

//基于JavaLinkedHashMap實現(xiàn)
public class LRUCache<K,V> extends LinkedHashMap<K,V>{
      private final int CACHE_SIZE;
      
      //保存?zhèn)鬟f進來的最大數(shù)據(jù)量
      public LRUCache(int cacheSize){
            //設(shè)置hashmap的初始大小氏堤,同時最后一個true指的是讓linkedhashmap按照訪問順序來進行排序沙绝,
           //最近訪問的放在頭,最老訪問的放在尾
           super((int)Math.ceil(cacheSize/0.75)+1,0.75f,true);
          CACHE_SIZE = CacheSize丽猬;
      }

      @Override
      protected boolean removeEldestEntry(Map.Entry eldest){
           //當(dāng)map中的數(shù)據(jù)量大于指定的緩存?zhèn)€數(shù)的時候宿饱,就自動刪除最老的數(shù)據(jù)熏瞄。
           return size() > CACHE_SIZE;
      }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脚祟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子强饮,更是在濱河造成了極大的恐慌由桌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異行您,居然都是意外死亡铭乾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門娃循,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炕檩,“玉大人,你說我怎么就攤上這事捌斧〉阎剩” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵捞蚂,是天一觀的道長妇押。 經(jīng)常有香客問我,道長姓迅,這世上最難降的妖魔是什么敲霍? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮丁存,結(jié)果婚禮上肩杈,老公的妹妹穿的比我還像新娘。我一直安慰自己柱嫌,他們只是感情好锋恬,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著编丘,像睡著了一般与学。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嘉抓,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天索守,我揣著相機與錄音,去河邊找鬼抑片。 笑死卵佛,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的敞斋。 我是一名探鬼主播截汪,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼植捎!你這毒婦竟也來了衙解?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤焰枢,失蹤者是張志新(化名)和其女友劉穎蚓峦,沒想到半個月后舌剂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡暑椰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年霍转,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片一汽。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡避消,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出召夹,到底是詐尸還是另有隱情沾谓,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布戳鹅,位于F島的核電站均驶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏枫虏。R本人自食惡果不足惜妇穴,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望隶债。 院中可真熱鬧腾它,春花似錦、人聲如沸死讹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赞警。三九已至妓忍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間愧旦,已是汗流浹背世剖。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留笤虫,地道東北人旁瘫。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像琼蚯,于是被迫代替她去往敵國和親酬凳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

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