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 每當快取命中 即快取資...