内存淘汰机制 LRU cache
生活随笔
收集整理的這篇文章主要介紹了
内存淘汰机制 LRU cache
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
LRU cache機(jī)制的目的是為了減少頻繁查找的開銷,包括磁盤IO等。
(1)、如果LRU中存在則從LRU緩存中查找,查找到了之后放到容器(list)的最前面
(2)、如果緩存中沒有,則從其地方(數(shù)據(jù)庫、磁盤、文件)中讀取,讀取之后放到容器的最前面
(3)、用戶設(shè)定緩存的大小
例如:
redis使用LRU機(jī)制來做內(nèi)存淘汰機(jī)制
其他關(guān)系型數(shù)據(jù)庫使用LRU減少磁盤IO的消耗
template <typename key_t, typename value_t> class LRU { public:typedef typename std::pair<key_t, value_t> key_value_t;typedef typename std::list<key_value_t>::iterator list_it_;explicit LRU(size_t size) : max_size_(size) {}~LRU() {}void put(const key_t& key, const value_t& value) {auto it = map_.find(key);if (it != map_.end()) {auto iter = map_[key];iter->second = value;list_.splice(list_.begin(), list_, iter);} else {if (list_.size() >= max_size_) {map_.erase(list_.back().first);list_.pop_back();}list_.push_front(key_value_t(key, value));map_[key] = list_.front();}}bool get(const key_t& key, value_t& value) {auto it = map_.find(key);if (it == map.end()) {return false;} else {value = it->second->second;list_.splice(list_.begin(), list_, it->second);}}size_t size() const {return map_.size();}private:boost::unordered_map<key_t, list_it_> map_;size_t size_;std::list<key_value_t> list_; };?
總結(jié)
以上是生活随笔為你收集整理的内存淘汰机制 LRU cache的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 螺旋模型、喷泉模型、增量模型的特点
- 下一篇: SSR端口冲突的解决法法