LRU演算法 作為快取

2021-09-26 01:54:06 字數 1002 閱讀 8644

lru演算法的設計原則是:如果乙個資料在最近一段時間沒有被訪問到,那麼在將來它被訪問的可能性也很小。也就是說,當限定的空間已存滿資料時,應當把最久沒有被訪問到的資料淘汰。

實現思想:用list儲存資料,用unodered_map儲存指向list的指標(方便定位查詢),和乙個資料量的最大值

**如下:

#include#include#include#includeusing namespace std;

/* * file: lrucache.hpp

* author: alexander ponomarev

* * created on june 20, 2013, 5:09 pm

*/templateclass lru_cache

void put(const key_t& key, const value_t& value)

_cache_items_map[key] = _cache_items_list.begin();

if (_cache_items_map.size() > _max_size)

} const value_t& get(const key_t& key)

else

} bool exists(const key_t& key) const

size_t size() const

void print()

cout << endl;

}private:

std::list_cache_items_list;

std::unordered_map_cache_items_map;

size_t _max_size;

};int main()

執行結果如下:

其它的快取演算法(頁面置換演算法)--fifo/lfu

使用Redis作為LRU快取

當 redis 作為快取使用時,當你新增新的資料時,有時候很方便使 redis 自動 老的資料。lru 實際上是被唯一支援的資料移除方法。redis 的 maxmemory 指令,用於限制記憶體使用到乙個固定的容量,也包含深入 redis 使用的 lru 演算法,乙個近似準確的 lru。maxmem...

LRU快取演算法

為什麼要有lru快取演算法 我們用快取來存放以前讀取的資料,而不是直接丟掉,這樣,再次讀取的時候,可以直接在快取裡面取,而不用再重新查詢一遍,這樣系統的反應能力會有很大提高。但是,當我們讀取的個數特別大的時候,我們不可能把所有已經讀取的資料都放在快取裡,畢竟記憶體大小是一定的,我們一般把最近常讀取的...

LRU演算法 快取演算法

lru演算法主要用於快取演算法,在節省資源的情況下提高資料訪問效率 篩選熱點資料 對不斷訪問的資料進行篩選淘汰,剩下的資料就為熱點資料 相對而言,釋放最近未被訪問資料占用的空間也是採用lru演算法。1 lru的實現 鍊錶 使用乙個鍊錶儲存快取資料 1 新資料插入到鍊錶頭部 2 每當快取命中 即快取資...