詳談八大緩存清除策略
計算機科學中只有兩件難事:緩存失效和命名。-- Phil Karlton
緩存驅逐是從緩存中刪除數據,以便在緩存容量達到極限時為新條目騰出空間的過程。這有時會由緩存失效觸發,即從緩存中刪除不再被視為有效或新鮮的數據。
下圖顯示了最常見的緩存驅逐策略。
1.LRU(最近最少使用)
LRU 驅逐策略首先刪除最近訪問次數最少的項目。這種方法的原理是,最近訪問過的項目在不久的將來更有可能再次被訪問。LRU 可以通過哈希表和雙鏈表的組合來實現。
2.MRU(最近使用)
與 LRU 相反,MRU 算法首先刪除最近使用的項目。在最近訪問的項目不太可能很快再次被訪問的情況下,這種策略非常有用。不過,由于 MRU 采用了與直覺相反的緩存管理方法,因此并不常用。
3.SLRU(分段式 LRU)
SLRU 將高速緩存分為兩段:緩存段和保護段。新項目最初被放入試用段。如果緩存段中的項目再次被訪問,它就會被提升到保護段。從緩存段的 LRU 端開始驅逐,保護段中的項目會被賦予更高的優先級,以留在緩存中。這種方法旨在將 LRU 的優勢與保護頻繁訪問項目的附加層結合起來。
4.LFU(最不常用算法)
LFU 算法會驅逐訪問頻率最低的項目。與考慮訪問時間的 LRU 不同,LFU 側重于項目被訪問的次數,因此更有利于長期重復訪問的項目。LFU 的實現可能比較復雜,因為它需要跟蹤訪問次數,并有可能動態調整整個緩存。
5.FIFO(先進先出)
FIFO 是最簡單的緩存策略之一,緩存以類似隊列的方式運行,先驅逐最舊的項目,而不管其訪問模式或頻率如何。雖然 FIFO 容易實現,但它并不考慮項目的實際使用情況,因此可能導致緩存性能不理想。
6.TTL(生存時間)
TTL 并非嚴格意義上的驅逐算法,它是一種為每個緩存項設定特定生命周期的策略。當 TTL 過期時,該項目將被視為過時項目,并在下次訪問緩存時被自動刪除或標記為符合驅逐條件。TTL 可與其他驅逐策略結合使用,以管理緩存的新鮮度。
7.雙層緩存
在雙層緩存策略中,第一層使用內存緩存,第二層使用分布式緩存。第一層通常保存經常使用的數據。
8.RR(隨機替換)
隨機替換算法隨機選擇一個緩存項并將其驅逐,為新項目騰出空間。這種方法實施起來也很簡單,不需要跟蹤訪問模式或頻率。不過,它的簡單性也帶來了代價,那就是可能純屬偶然地移除使用率高的項目。