Redis緩存淘汰策略


Redis緩存淘汰策略

當 redis 內存超出物理內存限制時,內存的數據會開始和磁盤產品頻繁的交換(swap)。這種機制因為涉及到 IO 操作,所以會讓 redis 的性能急劇下降。redis 訪問量本來就十分頻繁,存取效率大幅度降低是很致命的。

在生產環境中我們是不允許 redis 出現 swap 行為的。所以一般會限制最大的使用內存,redis 提供了配置參數maxmemory 來規定最大的使用內存。

以下配置均為合法:

maxmemory 1000KB
maxmemory 100MB
maxmemory 1GB
maxmemory 0  # 表示不做限制,一般不會用

當實際內存超出了 maxmemory 時,redis(5.0.8) 提供了八種淘汰策略(maxmemory-policy)供我們選擇。


  • noeviction

寫請求會報錯 (DEL 請求可以繼續服務),讀請求可以繼續進行。這樣可以保證不會丟失數據,但是會讓線上的業務不能持續進行。這是默認的淘汰策略。


  • volatile-lru

淘汰范圍:設置了過期時間的 key。(沒有設置過期時間的 key 不會被淘汰,這樣可以保證需要持久化的數據庫不會突然丟失)

淘汰策略:優先刪除最近最少使用的 key。(LRU算法實現:Least recently used,最近最少使用。)


  • volatile-lfu

淘汰范圍:設置了過期時間的 key。

淘汰策略:優先刪除使用頻率最少的 key。(LFU算法實現:Least frequently used,最不經常使用。)


  • volatile-ttl

淘汰范圍:設置了過期時間的 key。

淘汰策略:優先刪除剩余時間(ttl,time to live)短的 key。


  • volatile-random

淘汰范圍:設置了過期時間的 key。

淘汰策略:隨機刪除淘汰范圍內的 key。


  • allkeys-lru

淘汰范圍:全體 key。

淘汰策略:優先刪除最近最少使用的 key。(LRU算法實現:Least recently used,最近最少使用。)


  • allkeys-lfu

淘汰范圍:全體 key。

淘汰策略:優先刪除使用頻率最少的 key。(LFU算法實現:Least frequently used,最不經常使用。)


  • allkeys-random

淘汰范圍:全體 key。

淘汰策略:隨機刪除淘汰范圍內的 key。


  • 關於用哪個?

LRU算法淘汰的是最近最少使用的;
LFU算法淘汰的是一直以來使用頻率最少的。

還是得結合業務場景去考慮。
一般還是volatile-lru會偏多一點吧。

具體配置:

maxmemory-policy volatile-lru


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM