Redis過期策略

Redis所有的數(shù)據(jù)結(jié)構(gòu)都可以設(shè)置過期時間恬口,時間一到就會自動刪除比伏。
思考:Redis是單線程的,刪除key的時間也會占用線程的處理時間账月,如果刪除過于頻繁综膀,會導(dǎo)致CPU負載過高嗎,會導(dǎo)致線上讀寫指令出現(xiàn)卡頓嗎局齿?
下面來談?wù)凴edis的兩種刪除策略剧劝。

兩種刪除策略

定時刪除(集中處理)

Redis會將每個設(shè)置了過期時間的key放入到一個獨立的字典中,定時遍歷這個字典來刪除到期的key抓歼。
Redis默認每秒進行十次過期掃描讥此,過期掃描不會遍歷過期字典中的所有key,而是采用了一種簡單的貪心策略谣妻。

  1. 從過期字典中隨機20個key萄喳;
  2. 刪除這20個key中已經(jīng)過期的key;
  3. 如果過期Key的比率超過四分之一蹋半,重復(fù)步驟1他巨。

同時為了保證不會出現(xiàn)循環(huán)過度導(dǎo)致線程卡死,算法增加了掃描時間上線(默認25ms)减江。

惰性刪除(零散處理)

Redis在客戶端訪問這個key的時候染突,會對key的過期時間進行檢查,如果過期了就立即刪除辈灼。

Redis中大量key同一時間過期問題

Redis實例中存在大量同一時間過期的key過期時份企,Redis會持續(xù)掃描過期(循環(huán)多次),直到過期字段中過期的key變得稀疏茵休,才會停止(循環(huán)次數(shù)明顯下降)薪棒。這就會導(dǎo)致線上讀寫請求出現(xiàn)明顯的卡頓現(xiàn)象。導(dǎo)致這種卡頓的另外一種原因是內(nèi)存管理器需要頻繁的回收內(nèi)存頁榕莺,產(chǎn)生CPU消耗俐芯。
掃描上線25ms看起來不會導(dǎo)致卡頓,假設(shè)101個客戶端同事將請求發(fā)送過來钉鸯,前100個請求的執(zhí)行時間都是25ms吧史,那么第101個指令需要等待2500ms才能執(zhí)行,這就是客戶端卡頓時間唠雕,由于服務(wù)器不間斷的小卡頓積少成多贸营。
所以開發(fā)時需要注意過期時間吨述,如果有大批量key過期,要給過期時間設(shè)置一個隨機范圍钞脂,而不能全部在同一時間過期揣云。
實踐中如電商降價活動是一期一期舉辦的,下期舉辦時冰啃,前面幾期的數(shù)據(jù)可以過期了邓夕,所以一般都會設(shè)置一個過期時間,減少不必要的內(nèi)存占用阎毅,這個時候就需要將這些同時設(shè)置過期時間的商品使用固定時間+隨機時間焚刚,讓這些key不會同時過期。

從庫的過期策略

從庫不會進行定期掃描扇调,對過期的處理是被動的矿咕。主庫在key到期時,會在AOF文件里面增加一條del命令狼钮,同步到所有的從庫碳柱,從庫通過執(zhí)行這條del指令來刪除過期的key。
因為指令同步是異步進行的燃领,所以主庫過期的key的del指令沒有及時同步到從庫的話士聪,會出現(xiàn)主從數(shù)據(jù)不一致的情況。例如集群環(huán)境下分布式鎖的算法漏洞就是因為這個同步延時產(chǎn)生的猛蔽。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末剥悟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子曼库,更是在濱河造成了極大的恐慌区岗,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件毁枯,死亡現(xiàn)場離奇詭異慈缔,居然都是意外死亡,警方通過查閱死者的電腦和手機种玛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門藐鹤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赂韵,你說我怎么就攤上這事娱节。” “怎么了祭示?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵肄满,是天一觀的道長。 經(jīng)常有香客問我,道長稠歉,這世上最難降的妖魔是什么掰担? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮怒炸,結(jié)果婚禮上带饱,老公的妹妹穿的比我還像新娘。我一直安慰自己横媚,他們只是感情好纠炮,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著灯蝴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪孝宗。 梳的紋絲不亂的頭發(fā)上穷躁,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機與錄音因妇,去河邊找鬼问潭。 笑死,一個胖子當著我的面吹牛婚被,可吹牛的內(nèi)容都是我干的狡忙。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼址芯,長吁一口氣:“原來是場噩夢啊……” “哼灾茁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谷炸,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤北专,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后旬陡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拓颓,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年描孟,在試婚紗的時候發(fā)現(xiàn)自己被綠了驶睦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡匿醒,死狀恐怖场航,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情青抛,我是刑警寧澤旗闽,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響适室,放射性物質(zhì)發(fā)生泄漏嫡意。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一捣辆、第九天 我趴在偏房一處隱蔽的房頂上張望蔬螟。 院中可真熱鬧,春花似錦汽畴、人聲如沸旧巾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鲁猩。三九已至,卻和暖如春罢坝,著一層夾襖步出監(jiān)牢的瞬間廓握,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工嘁酿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留隙券,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓闹司,卻偏偏與公主長得像娱仔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子游桩,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

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

  • 在日常開發(fā)中牲迫,我們使用 Redis 存儲 key 時通常會設(shè)置一個過期時間,但是 Redis 是怎么刪除過期的 k...
    Java技術(shù)精選閱讀 199評論 0 0
  • 1.前言 Redis的所有數(shù)據(jù)結(jié)構(gòu)都是可以設(shè)置過期時間的众弓,時間一到就可以自動刪除恩溅。那么,redis內(nèi)部是如何知道哪...
    LZhan閱讀 446評論 0 0
  • Redis 所有的數(shù)據(jù)結(jié)構(gòu)都可以設(shè)置過期時間谓娃,時間一到脚乡,就會自動刪除。你可以想象 Redis 內(nèi)部有一個死神滨达,時刻...
    AC編程閱讀 174評論 0 3
  • Redis 所有的數(shù)據(jù)結(jié)構(gòu)都可以設(shè)置過期時間奶稠,時間一到,就會自動刪除捡遍。你可以想象Redis 內(nèi)部有一個死神锌订,時刻盯...
    逍遙白亦閱讀 516評論 0 1
  • 過期策略 定時過期(主動淘汰),Redis未使用每個設(shè)置過期時間的key都需要創(chuàng)建一個定時器画株,到過期時間就會立即清...
    天命ming閱讀 470評論 0 6