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

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


1. Redis內存策略

1.1 內存使用狀況說明

Redis將數據都保存到內存中,若是一直往內存中存儲數據,而不維護.未來可能致使內存數據存不下.內存溢出.redis

  • 1.主動淘汰
            在redis賦值操做執行時,能夠添加超時時間.當時間一到則數據自動刪除.算法

  • 2.採用算法進行淘汰dom

1.2 Redis中內存優化算法

1.2.1LRU算法

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

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

1.2.2LFU算法

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

1.2.3具體八種算法

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

  • 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算法.可是會增長內存的開銷.

相關文章
相關標籤/搜索