redis 淘汰策略有哪些?


  • noeviction: 不刪除策略, 達到最大內存限制時, 如果需要更多內存, 直接返回錯誤信息。 大多數寫命令都會導致占用更多的內存(有極少數會例外, 如 DEL )。
  • allkeys-lru: 所有key通用; 優先刪除最近最少使用(less recently used ,LRU) 的 key。
  • volatile-lru: 只限於設置了 expire 的部分; 優先刪除最近最少使用(less recently used ,LRU) 的 key。
  • allkeys-random: 所有key通用; 隨機刪除一部分 key。
  • volatile-random: 只限於設置了 expire 的部分; 隨機刪除一部分 key。
  • volatile-ttl: 只限於設置了 expire 的部分; 優先刪除剩余時間(time to live,TTL) 短的key。

maxmemory 用於指定 Redis 能使用的最大內存。既可以在 redis.conf 文件中設置, 也可以在運行過程中通過 CONFIG SET 命令動態修改。

例如, 要設置 100MB 的內存限制, 可以在 redis.conf 文件中這樣配置:

maxmemory 100mb

當內存使用達到最大限制時, 如果需要存儲新數據, 根據配置的策略(policies)的不同, Redis可能直接返回錯誤信息, 或者刪除部分老的數據。

策略選擇:

  • 如果分為熱數據與冷數據, 推薦使用 allkeys-lru 策略。 也就是, 其中一部分key經常被讀寫. 如果不確定具體的業務特征, 那么 allkeys-lru 是一個很好的選擇。
  • 如果需要循環讀寫所有的key, 或者各個key的訪問頻率差不多, 可以使用 allkeys-random 策略, 即讀寫所有元素的概率差不多。
  • 假如要讓 Redis 根據 TTL 來篩選需要刪除的key, 請使用 volatile-ttl 策略。

volatile-lru 和 volatile-random 策略主要應用場景是: 既有緩存,又有持久key的實例中。 一般來說, 像這類場景, 應該使用兩個單獨的 Redis 實例。

值得一提的是, 設置 expire 會消耗額外的內存, 所以使用 allkeys-lru 策略, 可以更高效地利用內存, 因為這樣就可以不再設置過期時間了。

參考鏈接:配置Redis作為緩存(六種淘汰策略)


免責聲明!

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



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