爲什麼要由逐出算法
情景分析,如果有新數據進入redis,但是數據都沒有過期,而且內存也不足,那麼這時就需要逐出算法,來騰出一些空間
Redis使用內存存儲數據,在執行每一個命令前,會調用freeMemoryIfNeeded()檢測內存是否充足
注意:逐出數據的過程不是100%能夠清理出足夠的可使用的內存空間,如果不成功則反覆執行,當對所有數據嘗試完畢後,如果不能達到內存清理的要求,將出現錯誤信息
配置
#最大可使用內存,佔用物理內存的比例,默認值爲0,表示不限制,生產環境根據需求設定,通常設置在50%以上
maxmemory
#每次選取待刪除數據的個數,選取數據時並不會全庫掃描,導致嚴重的性能消耗,降低讀寫性能,因此採用隨機獲取數據的凡是作爲待檢測刪除數據
maxmemory-samples
#刪除策略,達到最大內存後,對被挑選出來的數據進行刪除的策略
maxmemory-policy
逐出算法
- 檢查易失數據(可能會過去的數據)
- volatile-lru:挑選最近最少使用的數據淘汰
- volatile-lfu:挑選最近使用次數最少的數據淘汰
- volatile-ttl:挑選將要過期的數據淘汰
- volatile-random:任意選擇數據淘汰
- 檢查全庫數據
- allkeys-lru:挑選最近最少使用的數據淘汰
- allkeys-lfu:挑選最近使用次數最少的數據淘汰
- allkeys-random:任意選擇數據淘汰
- 放棄數據驅逐
- no-enviction:禁止驅逐數據
以上在redis.conf文件中修改
maxmemory-policy volatile-lru