Redis入門 刪除策略與逐出演算法

2021-10-07 12:55:08 字數 1634 閱讀 1020

redis是一種記憶體級別的資料庫,所有資料均存放在記憶體中。redis中資料可分為具有時效性的資料、永久有效的資料、已經      過期的資料或被刪除的資料或未定義的資料。

我們可以通過redis的ttl指令查詢資料的狀態:

. xx: 具有時效性的資料

. -1: 永久有效的資料

. -2: 已經過期的資料 或 被刪除的資料 或未定義的資料

實際上redis的刪除操作也需要占用redis伺服器的效能。如果redis正在高負載的工作進行刪除資料,那麼就會發生上圖可怕的情況。正是基於如此,redis才需要多種刪除策略,相互配合實現redis的過期資料刪除。

優點:節約記憶體,到時就刪除,快速釋放掉不必要的記憶體占用

缺點:cpu壓力很大。頻繁的刪除任務會占用cpu的效能,會影響redis伺服器響應時間和指令吞吐量

資料到達過期時間,不做處理。沒錯就是不理你,等下次再次訪問的時候,就直接刪除乾掉。

優點:節約cpu效能

缺點: 記憶體壓力大,出現長期占用記憶體的資料

定時刪除和惰性刪除都比較極端,而定期刪除就是比較折中的方案。

週期性輪詢redis庫中的時效性資料,採用隨機抽取的策略,利用過期資料佔比的方式控制刪除頻度。

定期刪除過程

redis啟動伺服器初始化時,讀取配置server.hz的值,預設值為10

每秒執行server.hz次servercron( )   ---> databasecron( )   ----->   activeexpirecycle( )

activeexpirecycle( )對每個資料分割槽進行逐一檢測,每次執行250ms/server.hz

對資料分割槽檢測時,隨機挑選w個key檢測:

資料分割槽中的過期資料會被刪除

如果一輪刪除過期資料的數量》w*25%,迴圈該過程

如果一輪刪除的過期資料數量<=w*25%, 檢查下乙個資料分割槽

定期刪除的特點

特點1:cpu效能占用設定有峰值,檢測頻度可自定義設定

特點2:記憶體壓力不是很大,長期占用記憶體的冷資料會被持續清理

redis是記憶體級的資料庫,當redis不斷儲存資料,資料滿了導致記憶體不足,如果再次儲存資料,怎麼辦呢?這就用到了逐出演算法。redis要臨時刪除一些資料為當前指令清理記憶體空間,清理資料的策略叫做逐出演算法。

逐出演算法的八大策略

對於易失資料:

volatile-lru :挑選最近最少使用的資料淘汰

volatile-lfu :挑選最近使用次數最少的資料淘汰

volatile-ttl  :挑選將要過起的資料淘汰

***tile-random: 任意選擇資料淘汰

檢測全庫資料

allkeys-lru :挑選最近使用最少的資料淘汰

allkeys-lfu :挑選最近使用次數最少的資料淘汰

allkeys-random: 任意選擇資料淘汰

放棄資料驅逐

no-enviction   放棄驅逐

Redis 刪除策略與逐出演算法

逐出演算法 參考 優點 節約記憶體,到時就刪除,快速釋放掉不必要的記憶體占用 缺點 cpu壓力很大,無論cpu此時負載量多高,均占用cpu,會影響redis伺服器響應時間和指令吞吐量 總結 用處理器效能換取儲存空間 拿時間換空間 優點 節約cpu效能,發現必須刪除的時候才刪除 缺點 記憶體壓力很大,...

Redis刪除策略和逐出演算法

redis中的資料特徵 redis是一種記憶體級資料庫,所有資料均存放在記憶體中,記憶體中的資料可以通過ttl指令獲取其狀態 xx 具有時效性的資料 1 永久有效的資料 2 已經過期的資料 或 被刪除的資料 或 未定義的資料 資料刪除策略 1.定時刪除 2.惰性刪除 3.定期刪除 時效性資料的儲存結...

Redis快取逐出策略

把 redis 當做快取使用時,有時你可以方便的讓它在新資料時自動逐出舊資料。這一點大家都比較清楚,因為 memcached 預設也會這麼幹。redis 僅支援 lru 逐出策略。下文主要講述 redis maxmemory 指令,這個指令用於限定記憶體使用量,以及講述了redis 使用到的 lru...