Redis刪除過期數(shù)據(jù)的策略概要

Redis 如何在刪除過期數(shù)據(jù)時,兼顧性能和內(nèi)存容量?

1、正常思路

1-1、定時刪除

定時掃描所有鍵值對,發(fā)現(xiàn)過期數(shù)據(jù)立即刪除。

優(yōu)點:內(nèi)存空間清理及時,有垃圾數(shù)據(jù)立即清除,確保了Redis的可用容量。

缺點:浪費CPU算力,對Redis中的所有數(shù)據(jù)進行全局遍歷是一件危險的事情,應(yīng)該盡力避免。這種做法會影響Redis的性能(吞吐量)。

1-2、懶惰刪除

數(shù)據(jù)過期后不做任何處理,每次被讀取時先判斷該數(shù)據(jù)是否過期,過期即刪。

優(yōu)點:性能優(yōu)異,不影響Redis的正常操作。

缺點:可能會在內(nèi)存中堆積大量過期數(shù)據(jù),占用存儲空間(極端情況:有些數(shù)據(jù)創(chuàng)建以后再也不會訪問了),這實際上相當(dāng)于內(nèi)存泄漏。

2、Redis的策略

這是一個基于概率的簡單策略,假設(shè)抽出的樣本能夠代表整個Redis存儲空間。

  1. Redis使用獨立的字典存儲設(shè)定了過期時間(expire)的數(shù)據(jù)的key,避免在各種操作時觸發(fā)全局遍歷。
  2. Redis 默認(rèn)每秒進行 10 次過期掃描,從過期字典中隨機選取 100 個 key,刪除其中已過期的數(shù)據(jù)。
  3. 如果上述掃描中發(fā)現(xiàn)過期 key 的比例超過 25%,則立即再發(fā)動一次掃描;直至比例降低到 25% 以下。
  4. 為保證過期掃描不會阻塞正常請求,CPU時間每秒鐘最多占用250ms。

以上的每秒掃描次數(shù),以及每秒最多占用的CPU時間,均受到配置文件 redis.conf 中的 hz 參數(shù)影響。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文對Redis的過期機制簡單的講解一下講解之前我們先拋出一個問題,我們知道很多時候服務(wù)器經(jīng)常會用到redis作為...
    小陳阿飛閱讀 1,378評論 0 0
  • NOSQL類型簡介鍵值對:會使用到一個哈希表,表中有一個特定的鍵和一個指針指向特定的數(shù)據(jù),如redis,volde...
    MicoCube閱讀 4,165評論 2 27
  • 今天看了冰叔的好嗎好的。其中有一篇說了果子的。有那么一句話:就好像沒有帶上保護傘,就一下子墜落下去。一直往下??吹?..
    vaccinen閱讀 311評論 0 0
  • 文櫻之思 今天聽到一本特別好的書,就是樊登讀書會作者光臨版塊的《關(guān)鍵期關(guān)鍵幫助》。這本書是李躍兒老師寫的,李躍兒老...
    櫻之思閱讀 1,683評論 0 2
  • 學(xué)東西學(xué)到嘔吐了,碼代碼的非常難受,此刻,只能用兩個字概括我的感受就是“嘔吐”。相當(dāng)?shù)碾y受,感覺腦子再裝一點東西,...
    a6dba64ebe2a閱讀 159評論 0 0

友情鏈接更多精彩內(nèi)容