Redis達到最大占用記憶體後的淘汰策略

2021-10-23 20:09:26 字數 1614 閱讀 1283

1. 查詢redis最大占用記憶體

# 查詢最大占用記憶體

config get maxmemory

# 為0時在64作業系統中不限制記憶體,在32位作業系統中最大為3gb

2. redis設定最大占用記憶體
# 設定最大占用記憶體大小為100mb

maxmemory 100mb

# 設定最大占用記憶體大小為100mb

config set maxmemory 100mb

3. redis記憶體淘汰策略

4. 查詢redis記憶體淘汰策略

# 查詢記憶體淘汰策略

config get maxmemory-policy

5. redis設定記憶體淘汰策略
# 設定記憶體淘汰策略為:allkeys-lru

maxmemory-policy allkeys-lru

# 設定記憶體淘汰策略為:allkeys-lru

config set maxmemory-policy allkeys-lru

6. lru演算法

lru(least recently used),即最近最少使用,是一種快取置換演算法。

在使用記憶體作為快取的時候,快取的大小一般是固定的。當快取被佔滿,這個時候繼續新增資料,就需要淘汰一部分資料,釋放記憶體空間儲存新的資料。此時就可以使用lru演算法了,其核心思想是:如果乙個資料在最近一段時間沒有被用到,那麼將來被使用到的可能性也很小,所以就可以被淘汰。

7. lru演算法在redis中的實現

redis使用的是近似lru演算法。近似lru演算法通過隨機取樣法淘汰資料,每次隨機出5(預設)個key,從裡面淘汰掉最近最少使用的key。

可以通過maxmemory-samples引數修改取樣數量:修改配置檔案中maxmemory-samples 10或通過命令config set maxmemory-samples 10。maxmenory-samples配置的數值越大,淘汰的結果越接近於嚴格的lru演算法。

redis為了實現近似lru演算法,給每個key額外增加了24位元組,用來儲存該key最後一次被訪問的時間。

8. redis3.0對近似lru的優化

redis3.0對近似lru演算法進行了一些優化。新演算法會維護乙個候選池(大小為16),池中的資料根據訪問時間進行排序,第一次隨機選取的key都會放入池中,隨後每次隨機選取的key只有在訪問時間小於池中最小的時間才會放入池中,直到候選池被放滿。當放滿後,如果有新的key需要放入,則將池中最後訪問時間最大(最近被訪問)的移除。

當需要淘汰的時候,則直接從池中選取最近訪問時間最小(最久未被訪問)的key淘汰。

9. redis4.0新增lfu演算法

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

lfu演算法能更好的表示乙個key被訪問的熱度。假如使用的是lru演算法,乙個key很久沒有被訪問,但是剛剛偶爾被訪問了一次,那麼它就被認為是熱點資料,不會被淘汰,而有些key將來很有可能被訪問到但被淘汰了。如果使用lfu演算法則不會出現這種情況,因為使用一次並不會使乙個key成為熱點資料。

10. lfu演算法策略

Redis占用記憶體大小

redis占用記憶體大小 我們知道redis是基於記憶體的key value資料庫,因為系統的記憶體大小有限,所以我們在使用redis的時候可以配置redis能使用的最大的記憶體大小。1 通過配置檔案配置 通過在redis安裝目錄下面的redis.conf配置檔案中新增以下配置設定記憶體大小。設定r...

Redis記憶體占用過大如何分析?

前幾天突然收到redis記憶體超標的報警,趕緊看了下監控,看到這個曲線吸了一口涼氣,這增長速度也太快了,需要快速定位出問題,不然就要爆了。這個redis由多個應用共享,我們就有2個問題需要解決 首先要找出是哪個應用在占用redis記憶體 其次是到底是某個key值太大,還是數量太多引起的?為解答這2個...

Redis之記憶體占用分析工具RDR

場景 最近redis爆滿,但是不清楚具體哪些鍵占用的空間較多,是否有設定過期時間等情況 windows releases download v0.0.1 rdr windows.exe 新增執行許可權 chmod a x rdr 2.用法 rdr show p 8000 rdb p 指定開啟的web...