Redis的Set數據結構提供了以下四種數據淘汰策略:
- noeviction(默認策略):當內存不足以容納新寫入數據時,新寫入操作會報錯。只有在沒有設置淘汰策略或者設置的淘汰策略無效時,才會使用這個策略。需要注意的是,這種策略并不會淘汰任何已經存在的數據。
- allkeys-lru:當內存不足以容納新寫入數據時,新寫入操作會報錯。將會淘汰最近最少使用的數據。也就是說,如果某個key被訪問過,那么它就不會被淘汰,即使內存空間不足。這個策略適用于訪問模式有明顯冷熱差異的場景。
- volatile-lru:與allkeys-lru相似,但只淘汰設置了過期時間的key。如果某個key沒有設置過期時間,那么即使內存空間不足,也不會被淘汰。這個策略適用于key的訪問模式有明顯冷熱差異,且大部分key都有過期時間的場景。
- volatile-random:當內存不足以容納新寫入數據時,新寫入操作會報錯。將會從已設置過期時間的數據集(server. db[i]. expires)中任意選擇數據淘汰。這個策略適用于訪問模式無明顯冷熱差異,且對key的訪問是隨機的場景。
- volatile-ttl:當內存不足以容納新寫入數據時,新寫入操作會報錯。將會淘汰剩余過期時間最短的數據。這個策略適用于訪問模式無明顯冷熱差異,且大部分key都有過期時間的場景,可以優先淘汰即將過期的數據以節省空間。
在使用這些淘汰策略時,需要根據具體的應用場景和需求來選擇合適的策略。同時,需要注意的是,淘汰策略只會在Redis內存使用達到maxmemory設置的值時才會觸發。因此,合理設置maxmemory也是使用淘汰策略的重要一環。