Redis(四) -- 淘汰過時策略

一:惰性刪除

1.1 策略描述

當訪問redis中鍵值對時會判斷這個鍵值對是否過時,若是過時的話就會刪除這個鍵值對並返回nilredis

1.2 策略優缺

  • 優勢:對CPU友好,不用執行與當前命令無關的操做
  • 缺點:對內存不友好,當大量過時的鍵值對不被訪問時會浪費大量內存空間

二:按期刪除

2.1 策略描述

爲了彌補惰性刪除對於內存的不友好,redis中還有一種過時策略即按期刪除。當一個鍵值對設置expire後,redis中會維護一個過時字典。這個過時字典在redis中會使用serverCron時間事件輪訓,輪訓過時鍵值對進行釋放bash

2.2 策略詳解

redis.conf配置文件中hz配置項配置serverCron每秒執行次數,默認10表示每100ms執行一次serverCron。redis中限制每次過時key清理時間不超過CPU時間的25%,這段時間內會執行以下步驟操做:dom

  • 1:隨機選取過時字典中的100個key
  • 2:淘汰全部的過時key
  • 3:若是過時key超過25個則重複步驟1

三:主動清理

物理機的內存空間是有限的,當全部內存被佔滿之後redis接收到寫操做命令應該怎麼處理?相關的清理策略又是什麼?spa

3.1 觸發機制

redis.conf配置文件中maxmemory參數設置redis佔用內存的大小,當超過這個值限定之後將會根據maxmemory-policy設置清理redis內存對象。有關這個maxmemory提醒一點:code

  • 集羣環境下適當調低maxmemory配置,給output buffer預留空間。由於output buffer空間並不包括在maxmemory中

3.2 清理策略

清理策略劃分能夠分爲兩個維度三個方面,兩個維度分別是過時鍵中篩選全部鍵中篩選,三個方面分別是lruttlrandomserver

  • volatile-lru:過時鍵中最長時間未調用的鍵值對
  • volatile-ttl:過時鍵中即將過時的鍵值對
  • volatile-random:過時鍵中隨機刪除
  • allkeys-lru:全部鍵中最長時間未調用的鍵值對
  • allkeys-random:全部鍵中隨機刪除
  • noevication:不清理,返回異常

3.3 相關參數

# 策略啓動閾值
maxmemory <bytes>
# 清理策略類型
# 默認不清理直接返回異常noeviction
maxmemory-policy noeviction
# 如策略採用volatile-lru,每次刪除會選擇參數設置個數樣本鍵值對
# 而後刪除其中lru時間最長的鍵值對
# 源碼註釋中告訴咱們默認參數5比較合適
# 10的話淘汰的ttl或者lru精度很高,可是CPU消耗比較大
# 3的話會很快,可是精度不會過高
maxmemory-samples 5
複製代碼
相關文章
相關標籤/搜索