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
- LRU 實現 通過 LinkedHashMapHashMap
- Android快取機制-LRU cache原理與用法Android快取
- Lombok 原理與實現Lombok
- 快取 LRU 和 LFU 實現快取
- 熔斷原理與實現
- InlineHook & 原理與實現(3)inlineHook
- @weakify 與 @strongify 實現原理
- 堆的原理與實現
- 動手實現一個 LRU cache
- LRU cache快取簡單實現快取
- 用 Go 實現一個 LRU cacheGo
- Redis核心原理與實踐--列表實現原理之ziplistRedis
- memcached分散式原理與實現分散式
- React基礎與原理實現React
- vysor原理與程式碼實現
- 深入解析 ResNet:實現與原理
- [SentencePiece]Tokenizer的原理與實現
- 模型融合——stacking原理與實現模型
- 富集分析的原理與實現
- 面試官:如何用LinkedHashMap實現LRU面試HashMap
- 利用LRU策略實現Axios請求快取iOS快取
- LRU演算法原理解析演算法
- HashMap 實現原理與原始碼分析HashMap原始碼
- JS 實現快取演算法(FIFO/LRU)JS快取演算法
- Lru在Rust中的實現, 原始碼解析Rust原始碼
- Python 中 lru_cache 的使用和實現Python
- 分散式鎖實現原理與最佳實踐分散式
- Redis核心原理與實踐--列表實現原理之quicklist結構RedisUI
- virtual-dom原理與簡單實現
- AQS與JUC中的鎖實現原理AQS
- Kalman濾波器的原理與實現
- 直方圖均衡化原理與實現直方圖
- Flink Window基本概念與實現原理
- Spring方法注入的使用與實現原理Spring
- 直播特效的實現原理與難點特效
- 告警與恢復告警原理及實現
- 【煉丹Trick】EMA的原理與實現