redis中,使用兩種內存回收策略
刪除過期的Key策略
1、惰性回收,當客戶端讀取某個Key時,如果當前的Key對應的記錄已經過期,則刪除當前的這條記錄,這個做法的好處:節省CPU成本,不需要維護TTL鏈表,但是缺點也很明顯,不能及時回收已經過期的記錄
2、定時回收,每隔一段時間,自定讀取一定數量的Key,判斷是否已經過期,刪除過期的冷數據。
內存超出maxmemory之後,淘汰機制,當Redis使用的內存超出設定的最大內存閾值後,Redis會根據策略,淘汰一部分數據,淘汰策略有六種方式
- noeviction:默認策略,當內存不足以容納新寫入數據時,新寫入操作會報錯。
- allkeys-lru:當內存不足以容納新寫入數據時,在鍵空間中,移除最近最少使用的 Key。
- allkeys-random:當內存不足以容納新寫入數據時,在鍵空間中,隨機移除某個 Key。
- volatile-lru:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,移除最近最少使用的 Key。這種情況一般是把 Redis 既當緩存,又做持久化存儲的時候才用。
- volatile-random:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,隨機移除某個 Key。
- volatile-ttl:當內存不足以容納新寫入數據時,在設置了過期時間的鍵空間中,有更早過期時間的 Key 優先移除。