1. 程式人生 > 其它 >Redis-記憶體淘汰策略

Redis-記憶體淘汰策略

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高