LRU原理與實現
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滿了,需要替換掉的就是雙向連結串列中最後的那個結點(不是尾結點,頭尾結點不儲存實際內容)。
相關文章
- LRU cache原理及go實現Go
- LRU Cache的原理和python的實現Python
- Java和Android的LRU快取及實現原理JavaAndroid快取
- LRU快取實現(Java)快取Java
- Lombok 原理與實現Lombok
- buffer cache部分原理(LRU)
- LRU 實現 通過 LinkedHashMapHashMap
- Android快取機制-LRU cache原理與用法Android快取
- 堆的原理與實現
- 熔斷原理與實現
- @weakify 與 @strongify 實現原理
- LRU cache快取簡單實現快取
- 動手實現一個 LRU cache
- 用 Go 實現一個 LRU cacheGo
- 用go 簡單實現的LRUGo
- Redis核心原理與實踐--列表實現原理之ziplistRedis
- memcached分散式原理與實現分散式
- vysor原理與程式碼實現
- React基礎與原理實現React
- 富集分析的原理與實現
- 前端模板的原理與實現前端
- jsonp的原理與實現JSON
- Flink原理與實現:SessionWindowSession
- Projective Texture的原理與實現Project
- 解析 iOS 動畫原理與實現iOS動畫
- 最近最久未使用(LRU)頁面置換演算法原理及模擬實現演算法
- 面試官:如何用LinkedHashMap實現LRU面試HashMap
- LRU Cache 的簡單 C++ 實現C++
- LRU演算法原理解析演算法
- OpenStack設計與實現(二)Libvirt簡介與實現原理
- HashMap 實現原理與原始碼分析HashMap原始碼
- InlineHook & 原理與實現(3)inlineHook
- 【煉丹Trick】EMA的原理與實現
- 模型融合——stacking原理與實現模型
- hashmap與Hashtable實現原理淺析HashMap
- Docker 核心技術與實現原理Docker
- Java反射機制實現與原理Java反射
- mysql metadata lock原理與實現MySql