LRU cache机制的目的是为了减少频繁查找的开销,包括磁盘IO等。
(1)、如果LRU中存在则从LRU缓存中查找,查找到了之后放到容器(list)的最前面
(2)、如果缓存中没有,则从其地方(数据库、磁盘、文件)中读取,读取之后放到容器的最前面
(3)、用户设定缓存的大小
例如:
redis使用LRU机制来做内存淘汰机制
其他关系型数据库使用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_;
};