1. 程式人生 > >Redis快取篇(三)快取汙染

Redis快取篇(三)快取汙染

上一講介紹了快取滿了,通過記憶體淘汰機制來淘汰掉資料。如果有的資料一直滯留在快取中,但又沒有應用使用,時間長了,就可能會佔據大部分的快取空間。 今天我們來學習一下快取汙染,以及如何解決快取汙染。 ## 快取汙染 快取汙染,指留存在快取中的資料,實際不會被再次訪問了,但又佔據了快取空間。 要解決快取汙染的關鍵點是**能識別出只訪問一次或者訪問次數很少的資料**。 從能否解決快取汙染這一維度來分析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講](https://www.cnblogs.com/liang24/p/14210482.html)。 ## 總結 快取淘汰策略 | 解決快取汙染 ---|--- noeviction策略 | 不能 volatile-ttl策略 | 能 volatile-random策略 | 不能 volatile-lru策略 | 不能 volatile-lfu策略 | 能 allkeys-random策略 | 不能 allkeys-lru策略 | 不能 allkeys-lfu策略 | 能 ## 參考資料 - [27 | 快取被汙染了,該怎麼辦?](https://time.geekbang.org/column/article