LRU原理與實現

無鞋童鞋發表於2017-08-31

1 LRU Cache
  LRU(Least Recently Used,最近最少使用)是一種Cache替換演算法。什麼是Cache?狹義的Cache指的是位於CPU和主存間的快速RAM,通常它不像系統主存那樣使用DRAM技術,而使用昂貴但較快速的SRAM技術。廣義上的Cache指的是位於速度相差較大的兩種硬體之間,用於協調兩者資料傳輸速度差異的結構。除了CPU與主存之間有Cache,記憶體與硬碟之間也有Cache,乃至在硬碟與網路之間也有某種意義上的Cache──稱為Internet臨時資料夾或網路內容快取等。
  Cache的容量有限,因此當Cache的容量用完後,而又有新的內容需要新增進來時,就需要挑選並捨棄原有的部分內容,從而騰出空間來放新內容。LRU Cache的替換原則就是將最近最少使用的內容替換掉。其實,LRU譯成最久未使用會更形象,因為該演算法每次替換掉的就是一段時間內最久沒有使用過的內容。
2 具體實現
  LRU的典型實現是雜湊表(hash map) + 雙向連結串列(doubly linked list),雙向連結串列用於儲存資料結點,並且它是按照結點最近被使用的時間來儲存的。如果一個結點被訪問了,我們有理由相信它在接下來的一段時間被訪問的概率要大於其它結點。於是,我們把它放到雙向連結串列的頭部。當我們往雙向連結串列裡插入一個結點,我們也有可能很快就會使用到它,同樣把它插入到頭部。我們使用這種方式不斷地調整著雙向連結串列,連結串列尾部的結點自然也就是最近一段時間,最久沒有使用到的結點。那麼,當我們的Cache滿了,需要替換掉的就是雙向連結串列中最後的那個結點(不是尾結點,頭尾結點不儲存實際內容)。

相關文章