在之前的文章中簡單描述了一下如何通過LRU結合多層快取機制實現高命中的快取,這一章節裡的主要內容是深入地瞭解其原理的實現.
LRU演算法
什麼是LRU演算法? LRU是Least Recently Used的縮寫,即最少使用頁面置換演算法,是為虛擬頁式儲存管理服務的.通過這種演算法可以把最近使用的資料遷移到資料儲存的熱區,而不常用的資料則遷到資料儲存的冷區;通過資料儲存分割槽那在清除區域性冷區資料相應要處理的複雜底就會降低.在.NET中可以通過一個雙向連結串列來實現冷熱互動的結構,大概結構如下:
以上是一個基於雙向連結串列儲存的原理,新新增進來的資料會新增到頭部,當資料被獲取命中後同樣也會移至到連結串列頭,這樣就能形成一個上面的熱資料而下面的冷資料的儲存結構體.基於這種結構我們可以在新增的時候如果儲存容間不足就可以把尾部的項移走,在移除超時項時也只需要從底部開始檢測這樣可以做以最少複雜度的情況把已經超時的資料刪除.
層次提升
在之前的文章裡已經提到,只有LRU是滿足不了命中率的需求.LRU只以保證最新的資料儲存在熱區,訪問低的資料儲存在冷區.但在實際應用中熱區的資料並不代表中率就很高;因此為了滿足儲存命中率的需要就要加入類似於CPU中多級快取區的機制原理.
通過以上劃分層次可以把不同命中率的資料存放到不同的快取區,命中率最高的存放在最頂層,依次往下儲存命中最低的儲存到最低層.而應用處理則從最頂層開始檢索,保證最快獲取命中高的資料.
既然有了不同命中的儲存區,那剩的工作就是如何把當前資料在這些區域中切換,其實現原理可以採用很簡單的方法就是當一個快取項在某個區中被獲取的次數達到一定資料而又沒有被當前區排除那就可以提升其命中率的級別.