日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

内存淘汰机制 LRU cache

發(fā)布時(shí)間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内存淘汰机制 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。