Redis學習心得 lru演算法

2021-09-26 12:04:12 字數 1532 閱讀 4566

lru策略等於命中策略,保留平時訪問高的資料,淘汰那些使用不多的資料,為redis解決記憶體空間不足的問題。

lru演算法是根據每個檔案的最後一次訪問時間,對檔案做**,也就是或同乙個檔案間隔的訪問時間越短,那麼就代表當前檔案訪問量更大,也就是被留中的機率更大,時間越長,恰好相反。

maxmemory:指定redis儲存資料時消耗記憶體大小,比如200m,當資料消耗記憶體達到此值時,觸發資料淘汰,為0時,表示對資料消耗記憶體不做限制,也代表者lru功能失效,64位系統預設值為0,32位系統預設值位3gb。 例如:maxmemory 200m

maxmemory_policy:觸發資料後的淘汰策略,也就是資料消耗記憶體達到maxmemory指定值後,將觸發對應的淘汰策略(幾種淘汰策略見下文),後面接淘汰策略。 例如:maxmemory_policy volatie-lru

maxmemory_sample:隨機取樣,也就是隨機抽取key的數目,該值越大,就越接近真實lru演算法,但是數值越大,相應的消耗也越大,對效能會產生影響,預設值是5.

淘汰策略也就是lru提供的6種淘汰機制,也就是maxmemory_policy的對應賦值。

noeviction:不淘汰資料,當記憶體使用超過maxmemory值時,返回報錯並停止資料寫入,預設redis是此策略。

allkeys-lru:查詢所有key中不常用的資料進行刪除,

volatile-lru:在設定了超時時間的資料中,將不常用資料刪除。

allkeys-random:查詢所有key之後,隨機刪除

volatile-random:在設定超時時間資料中,隨機刪除

volatile-ttl:查詢全部設定超時時間的資料,之後進行排序,把馬上要過期的資料進行刪除

4.0以後新增的2條策略:

volatile-lfu:從設定超時時間的鍵中驅逐使用頻率最少的鍵

allkeys-lfu:從所有鍵中驅逐出最少的鍵

lru演算法需要乙個雙向鍊錶來記錄資料的最近被訪問順序,但是出於節省記憶體的考慮,redis的lru演算法並非完整的實現。redis並不會選擇最久未被訪問的鍵進行**,近似lru演算法是為了補足lur這點不足而另外產生的一種演算法。

工作流程:對少量的鍵進行隨機取樣,然後**其中最長時間未被訪問的鍵,可以使用maxmemory-sample進行調整演算法的精度,滿足需求。

相關資料:

redis3.0之後又改善了演算法的效能,會提供乙個待淘汰候選key的pool,裡面預設有16個key,按照空閒時間排好序。更新時從redis鍵空間隨機選擇n個key,分別計算它們的空閒時間idle,key只會在pool不滿或者空閒時間大於pool裡最小的時,才會進入pool,然後從pool中選擇空閒時間最大的key淘汰掉。

學習心得 python學習心得

自從來了深圳工作以後,尤其是屢屢面試碰壁以後。發現其實自己的知識面很窄,做筆試題的時候絞盡腦汁還是漏洞百出,並不是不會做,而是出現一大堆不該有的失誤。每次被問道,對資料庫了解嗎?說一大堆看起來很高階的東西 好啊,那我們寫幾個sql語句吧。馬上完蛋了,沒了手冊關鍵字都記不起。了解哪幾種指令碼語言,sh...

學習心得 我的學習心得

我是乙個已經步入中年的70後,離開校園已經20年了,因為當年的政策因素而未能圓我的大學夢,在20年的工作過程中總是因為缺少一張大學文憑而失去了很多機會,曾經也考慮過自考,但是乙個人去面對的時候總感覺心有餘而力不足。2018年3月份偶然讓我認識了尚德,原來自考還可以這樣學習。一直懷疑自己年紀大了記憶力...

排序演算法學習心得

近期終於弄懂了六種演算法,寫個小部落格記錄下 一 六種演算法解析 1 直接插入排序 2 演算法特點 保證每一次遍歷後,前面的資料都是排序好的 2 public static int insert int arr arr pos arr i arr i temp return arr 3 氣泡排序 1...