Redis5.0之後的內存策略--最新八種算法

前言:這八種算法是基於redis5.0版之後的,他新增了新增allkeys-lfu,volatile-lfu這兩種算法,也就是多了LFU算法,而LFU與LRU算法不同在於;LRU是淘汰最近最長時間未使用的頁面進行淘汰,而LFU是要求在頁置換時置換引用計數最小的頁,因爲經常使用的頁應該有一個較大的引用次數。但是有些頁在開始時使用次數很多,但以後就不再使用,這類頁將會長時間留在內存中,因此可以將引用計數寄存器定時右移一位,形成指數衰減的平均使用次數。


1. Redis內存策略

1.1 內存使用情況說明

Redis將數據都保存到內存中,如果一直往內存中存儲數據,而不維護.將來可能導致內存數據存不下.內存溢出.

  • 1.主動淘汰
            在redis賦值操作執行時,可以添加超時時間.當時間一到則數據自動刪除.

  • 2.採用算法進行淘汰

1.2 Redis中內存優化算法

1.2.1LRU算法

     LRU是Least Recently Used的縮寫,即最近最少使用,是一種常用的頁面置換算法,選擇最近最久未使用的頁面予以淘汰。該算法賦予每個頁面一個訪問字段,用來記錄一個頁面自上次被訪問以來所經歷的時間 t,當須淘汰一個頁面時,選擇現有頁面中其 t 值最大的,即最近最少使用的頁面予以淘汰。

以時間T爲維度,刪除不使用的數據,實現內存的清空。

1.2.2LFU算法

     LFU(least frequently used (LFU) page-replacement algorithm)。即最不經常使用頁置換算法,要求在頁置換時置換引用計數最小的頁,因爲經常使用的頁應該有一個較大的引用次數。但是有些頁在開始時使用次數很多,但以後就不再使用,這類頁將會長時間留在內存中,因此可以將引用計數寄存器定時右移一位,形成指數衰減的平均使用次數。

1.2.3具體八種算法

  • 1.volatile-lru 設定了超時時間數據,之後採用LRU算法進行刪除.

  • 2.allkeys-lru 全部數據,採用LRU算法進行內存數據的優化.

  • 3.volatile-lfu 設定了超時時間的數據,採用LFU算法進行刪除

  • 4.allkeys-lfu 所有的數據採用LFU算法實現數據刪除.

  • 5.volatile-random 爲設定超時時間的數據採用隨機算法.

  • 6.allkeys-random 所有數據採用隨機算法實現刪除.

  • 7.volatile-ttl 將所有設定了超時時間的數據,利用ttl方式進行排序,將還沒有超時的數據提前刪除.

  • 8.noeviction (默認策略)不採用任何的算法刪除數據.如果將來內存溢出則報錯返回.

在這裏插入圖片描述

1.2.4修改redis內存策略

設定redis中的內存優化策略.

597 maxmemory-policy volatile-lru     

608 maxmemory-samples 5         lru算法取值個數

問題:如果redis中有100萬的數據,都要採用LRU算法進行優化,則計算100萬數據的時間性能太低了.

優化:隨機篩選5個數據. 在5個數據中執行lru算法.優化1個數據.

一般默認值爲5,表示性能最優.篩選的個數可以調整 最大不要超過10.

據官方的統計,如果篩選的個數爲10 ,則接近真實的LRU算法.但是會增加內存的開銷.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章