當訪問redis中鍵值對時會判斷這個鍵值對是否過時,若是過時的話就會刪除這個鍵值對並返回nilredis
爲了彌補惰性刪除對於內存的不友好,redis中還有一種過時策略即按期刪除。當一個鍵值對設置expire後,redis中會維護一個過時字典。這個過時字典在redis中會使用serverCron時間事件輪訓,輪訓過時鍵值對進行釋放bash
redis.conf配置文件中hz
配置項配置serverCron每秒執行次數,默認10表示每100ms執行一次serverCron。redis中限制每次過時key清理時間不超過CPU時間的25%,這段時間內會執行以下步驟操做:dom
物理機的內存空間是有限的,當全部內存被佔滿之後redis接收到寫操做命令應該怎麼處理?相關的清理策略又是什麼?spa
redis.conf
配置文件中maxmemory參數設置redis佔用內存的大小,當超過這個值限定之後將會根據maxmemory-policy
設置清理redis內存對象。有關這個maxmemory提醒一點:code
清理策略劃分能夠分爲兩個維度三個方面,兩個維度分別是過時鍵中篩選
、全部鍵中篩選
,三個方面分別是lru
、ttl
、random
server
# 策略啓動閾值
maxmemory <bytes>
# 清理策略類型
# 默認不清理直接返回異常noeviction
maxmemory-policy noeviction
# 如策略採用volatile-lru,每次刪除會選擇參數設置個數樣本鍵值對
# 而後刪除其中lru時間最長的鍵值對
# 源碼註釋中告訴咱們默認參數5比較合適
# 10的話淘汰的ttl或者lru精度很高,可是CPU消耗比較大
# 3的話會很快,可是精度不會過高
maxmemory-samples 5
複製代碼