redis的各種淘汰演算法

2021-10-24 01:23:48 字數 1193 閱讀 9540

volatile-lru:從已設定過期時間的資料集(server.db [i].expires)中挑選最近最少使用的資料淘汰

volatile-ttl:從已設定過期時間的資料集(server.db [i].expires)中挑選將要過期的資料淘汰

volatile-random:從已設定過期時間的資料集(server.db [i].expires)中任意選擇資料淘汰

allkeys-lru:從資料集(server.db [i].dict)中挑選最近最少使用的資料淘汰

allkeys-random:從資料集(server.db [i].dict)中任意選擇資料淘汰

no-enviction(驅逐):禁止驅逐資料

lru淘汰

lru(least recently used,最近最少使用)

演算法根據資料的歷史訪問記錄來進行淘汰資料,其核心思想是「如果資料最近被訪問過,那麼將來被訪問的機率也更高」。

lfu演算法是redis4.0裡面新加的一種淘汰策略。它的全稱是least frequently used

它的核心思想是根據key的最近被訪問的頻率進行淘汰,很少被訪問的優先被淘汰,被訪問的多的則被留下來。

lru的優點:lru相比於 lfu 而言效能更好一些,因為它演算法相對比較簡單,不需要記錄訪問頻次,可以更好的應對突發流量。

lru的缺點:雖然效能好一些,但是它通過歷史資料來**未來是侷限的,它會認為最後到來的資料是最可能被再次訪問的,從而給與它最高的優先順序。有些非熱點資料被訪問過後,佔據了高優先順序,它會在快取中佔據相當長的時間,從而造成空間浪費。

lfu的優點:lfu根據訪問頻次訪問,在大部分情況下,熱點資料的頻次肯定高於非熱點資料,所以它的命中率非常高。

lfu的缺點:lfu 演算法相對比較複雜,效能比 lru 差。有問題的是下面這種情況,比如前一段時間微博有個熱點話題熱度非常高,就比如那種可以讓微博短時間停止服務的,於是趕緊快取起來,lfu 演算法記錄了其中熱點詞的訪問頻率,可能高達十幾億,而過後很長一段時間,這個話題已經不是熱點了,新的熱點也來了,但是,新熱點話題的熱度沒辦法到達十幾億,也就是說訪問頻次沒有之前的話題高,那之前的熱點就會一直佔據著快取空間,長時間無法被剔除。

記憶體淘汰演算法 Redis資料淘汰演算法

眾所周知,redis的所有資料都儲存在記憶體中,但是記憶體是一種有限的資源,所以為了防止redis無限制的使用記憶體,在啟動redis時可以通過配置項maxmemory來指定其最大能使用的記憶體容量。例如可以通過以下配置來設定redis最大能使用 1g 記憶體 maxmemory 1g當redis使...

Redis 刪除策略和淘汰演算法

1.4 刪除策略的比較 二 資料淘汰策略 參考文章 我們可以使用ttl指令獲取資料狀態 返回 1 永久有效的資料 返回 2 已經過期的資料或被刪除的資料或未定義的資料 對於過期資料,redis 刪除這些資料時會使用相應的刪除策略。刪除策略主要有三種,分別是定時刪除 惰性刪除 定期刪除。redis 使...

redis的淘汰策略

volatile lru 從已設定過期時間的資料集 server.db i expires 中挑選最近最少使用的資料淘汰。volatile ttl 從已設定過期時間的資料集 server.db i expires 中挑選將要過期的資料淘汰。volatile random 從已設定過期時間的資料集 s...