Redis-記憶體淘汰策略
阿新 • • 發佈:2022-03-10
1、為什麼需要記憶體淘汰?
redis的資料可以分為兩種,一種不帶過期時間,另一種帶有過期時間,到期自動刪除。假如redis的記憶體佔用閾值為M,那麼不帶過期時間的資料太多或者帶過期時間的資料沒有及時刪除,都可能導致記憶體溢位。
redis的過期刪除策略:a、定期刪除:redis會對設定了過期時間的資料定期掃描一邊,如果發現有過期的,直接刪除(定期-100ms 掃描也不是對所有資料全掃一遍,而是採取抽樣的方式,抽取一定數量的key檢查,如果過期比例超過某個值,繼續抽取一定數量的key)
b、惰性刪除:當獲取某個資料時,發現它已經過期,直接刪除
2、記憶體淘汰策略
1. noeviction:當記憶體使用超過配置的時候會返回錯誤,不會刪除任何鍵
2. allkeys-lru:加入鍵的時候,如果過限,首先通過LRU演算法刪除最久沒有使用的鍵
3. volatile-lru:加入鍵的時候如果過限,首先從設定了過期時間的鍵集合中刪除最久沒有使用的鍵
4. allkeys-random:加入鍵的時候如果過限,從所有key隨機刪除
5. volatile-random:加入鍵的時候如果過限,從過期鍵的集合中隨機刪除
6. volatile-ttl:從配置了過期時間的鍵中刪除馬上就要過期的鍵
7. volatile-lfu:從所有配置了過期時間的鍵中刪除使用頻率最少的鍵
8. allkeys-lfu:從所有鍵中刪除使用頻率最少的鍵
lru 和 lfu的區別:lru是使用時間維度, lfu主要是加上使用頻率維度,因為不一定最近使用的key,使用頻率就比其它key高