Redis 的過期策略以及記憶體回收機制
阿新 • • 發佈:2018-12-07
一、Redis過期策略
redis是如何處理過期的key?
分為2種:passive (被動)和active(主動)
所謂被動的處理方式就是 :當一些客戶端進行訪問的時候,祕鑰被動過期,並且發現祕鑰超時
只有被動是不夠的,因為所有過期的祕鑰是永遠不會被訪問的,所以Redis有自己的過期演算法。
Redis 每秒執行10次 會執行以下概率演算法:
- 從相關的過期祕鑰集合中隨機測試20個祕鑰。
- 刪除所有已找到的祕鑰。
- 如果有超過25%的祕鑰過期,重新執行第一步。
這就意味著任何時刻,使用記憶體的鍵已經過期的最大數量最大等於每秒的最大寫操作量除以4。
參考官方文件:https://redis.io/commands/expire
二、記憶體回收機制
回收策略 主要用於 當redis用於快取的記憶體不足時,如何處理寫入和申請記憶體空間
maxmemory <bytes> #最大記憶體 單位位元組
maxmemory-policy noeviction #預設
- noeviction -> 不做任何處理,只在寫入時 ,提示錯誤
- volatile-ttl -> 刪除最近到期的key
- allkeys-random -> 隨機刪除任意key
- volatile-random -> 刪除具有過期時間的隨機祕鑰
- allkeys-lfu -> 移除最近最少使用的key
- volatile-lfu -> 在設定了過期時間的鍵空間中,移除最近最少使用的key
- allkeys-lru -> 移除最少使用的key
- volatile-lru -> 在設定了過期時間的鍵空間中,移除最少使用的key
LRU意味著最近最少使用,LFU指最少使用
LRU、LFU和最小TTL演算法不是精確演算法,而是近似的,如果需要調整的話
maxmemory-samples 5
預設5 已經很好了,如果需要精準度更高可以調大,但是效能就下降,反之亦然。