Redis緩存篇(三)緩存污染

上一講介紹了緩存滿了,經過內存淘汰機制來淘汰掉數據。若是有的數據一直滯留在緩存中,但又沒有應用使用,時間長了,就可能會佔據大部分的緩存空間。html

今天咱們來學習一下緩存污染,以及如何解決緩存污染。算法

緩存污染

緩存污染,指留存在緩存中的數據,實際不會被再次訪問了,但又佔據了緩存空間。緩存

要解決緩存污染的關鍵點是能識別出只訪問一次或者訪問次數不多的數據dom

從可否解決緩存污染這一維度來分析Redis的8種緩存淘汰策略:學習

  • noeviction策略:不會淘汰數據,解決不了。
  • volatile-ttl策略:給數據設置合理的過時時間。當緩存寫滿時,會淘汰剩餘存活時間最短的數據,避免滯留在緩存中,形成污染。
  • volatile-random策略:隨機選擇數據,沒法把再也不訪問的數據篩選出來,會形成緩存污染。
  • volatile-lru策略:LRU策略只考慮數據的訪問時效,對只訪問一次的數據,不能很快篩選出來。
  • volatile-lfu策略:LFU策略在LRU策略基礎上進行了優化,篩選數據時優先篩選並淘汰訪問次數少的數據。
  • allkeys-random策略:隨機選擇數據,沒法把再也不訪問的數據篩選出來,會形成緩存污染。
  • allkeys-lru策略:LRU策略只考慮數據的訪問時效,對只訪問一次的數據,不能很快篩選出來。
  • allkeys-lfu策略:LFU策略在LRU策略基礎上進行了優化,篩選數據時優先篩選並淘汰訪問次數少的數據。

關於LRU和LFU算法的內容,點擊查看系列的第2講優化

總結

緩存淘汰策略 解決緩存污染
noeviction策略 不能
volatile-ttl策略
volatile-random策略 不能
volatile-lru策略 不能
volatile-lfu策略
allkeys-random策略 不能
allkeys-lru策略 不能
allkeys-lfu策略

參考資料

相關文章
相關標籤/搜索