2019独角兽企业重金招聘Python工程师标准>>>

用LRU置换原则来解决 缓存满载问题

以下是一个实现,还可以进一步优化,在此不在阐述

#include <iostream>
#include <list>
#include <string>
#include <algorithm>
using namespace std;class Node
{
public:string _data;string _key;Node(string key, string data){this->_data = data;this->_key = key;}void release(){ delete this; }Node(){}
};/*
LRU = Least Recently Used的缩写,即最近最少使用的操作系统内存页面置换算法,利用该思想设计一个缓存如果缓存满载后,把最近最少使用的从缓存中移除基本思想:
用链表来维护,每次使用一个 缓存数据时吧该节点放到链表头部,
链表头到尾使用顺序依次递减,所以链表尾部是当前整个链表最少使用的。
利用链表的顺序来标记,使用情况,避免了用诸如使用时间来标记,性能大大提升。添加缓存:吧添加的放到链表尾部,维护当前队列大小,如果满载,那么移除最少使用的
返回缓存:负责吧目标数据移到链表头部,表示当前使用的,*/#define  MAX_SIZE  3class LRU_Cache
{public:Node*getValue(const string & key){Node* target = nullptr;// 查找,目标Nodeauto iter = this->_list.begin();while (iter != this->_list.end()){if ((*iter)->_key == key){//查找成功,从链表中移除,然后添加到头部target = *iter;this->_list.erase(iter);_list.push_front(target);return target;break;}iter++;}return nullptr;}void addValue(const string & key, string data){auto iter = this->_list.begin();while (iter != this->_list.end()){if ((*iter)->_key == key){//已经存在return;}iter++;}if (this->_curr_size == MAX_SIZE){//满载 ,移除最近最少使用 (链表尾部)this->_curr_size--;this->_list.remove(_list.back());}_list.push_front(new Node(key, data));this->_curr_size++;cout << __FUNCTION__ << "Curr Size" << _curr_size << endl;}void print(){auto iter = this->_list.begin();while (iter != this->_list.end()){cout << "Key:" << (*iter)->_key << "  Value:" << (*iter)->_data << endl;iter++;}}std::list <Node*> _list;unsigned int _curr_size = 0;};int main()
{LRU_Cache*cache = new LRU_Cache;cache->addValue("111111", "data");cache->addValue("22222", "data");cache->addValue("333333", "data");cache->getValue("333333");cache->addValue("444444", "data");cout << cache->_curr_size;cache->print();system("pause");return 0;
}

转载于:https://my.oschina.net/kkkkkkkkkkkkk/blog/710261

Cache满载的LRU置换相关推荐

  1. buffer cache中的LRU链+

    转自晶晶小妹的博客:http://space.itpub.net/13095417/viewspace-204007 一.LRU链介绍 HASH是快速查找时,常用的算法.Oracle中几乎在所有需要快 ...

  2. 每天一道LeetCode-----实现LRU置换算法

    LRU Cache 原题链接LRU Cache 实现LRU,是一个页面置换算法,当容量满时,将最不常用的那个页删掉,腾出空间容纳新页. 实现的方法是采用map和list作为存储结构,其中 list保存 ...

  3. java 最少使用(lru)置换算法_缓存置换算法 - LRU算法

    LRU算法 1 原理 对于在内存中并且不被使用的数据块就是LRU,这类数据需要从内存中删除,以腾出空间来存储常用的数据. LRU算法(Least Recently Used,最近最少使用),是内存管理 ...

  4. java 最少使用(lru)置换算法_一篇文章学会如何基于LRU-K算法设计本地缓存实现流量削峰...

    专注于Java领域优质技术号,欢迎关注 作者:一个Java菜鸟 1.背景介绍 1.1.现象 QPS突然增长2倍以上(45w~60w每分钟) 将产生下面一些问题: 1)响应接口响应时长增加了5倍(qps ...

  5. java 最少使用(lru)置换算法_「Redis源码分析」Redis中的LRU算法实现

    如果对我的文章感兴趣.希望阅读完可以得到你的一个[三连],这将是对我最大的鼓励和支持. LRU是什么 LRU(least recently used)是一种缓存置换算法.即在缓存有限的情况下,如果有新 ...

  6. java 最少使用(lru)置换算法_[内附完整源码和文档] 基于C#的可视化虚拟存储器管理(LUR算法)...

    一.目的要求 理解虚拟存储器概念,并掌握分页式存储管理地址转换和缺页中断的处理过程.用高级语言模拟请求分页式虚拟存储器的工作过程和页面置换算法LRU. 二.准备知识 2.1 分页式存储管理原理 在存储 ...

  7. 操作系统:LRU置换算法实现

    最近最久未使用(LRU)置换算法原理 就是:当需要淘汰某页面时,选择当前一段时间内最久未使用过的页先淘汰, 即淘汰距当前最远的上次使用的页. 例如: 分配给该进程的页块数为3,一个20长的页面访问序列 ...

  8. java 最少使用(lru)置换算法_「面试」LRU了解么?看看LinkedHashMap如何实现LRU算法...

    以下内容均是本人原创,希望你看完之后能有更多更深入的了解,欢迎关注➕ 问题:使用Java完成一个简单的LRU算法 什么是LRU算法 LRU(Least Recently Used),也就是最近最少使用 ...

  9. Cache替换算法:LRU与LFU的区别

    LFU(Least Frequently Used)最近最少使用算法.它是基于"如果一个数据在最近一段时间内使用次数很少,那么在将来一段时间内被使用的可能性也很小"的思路.LRU( ...

  10. java 最少使用(lru)置换算法_LRU算法详解及最简单的Java实现

    更多内容,欢迎关注微信公众号:全菜工程师小辉~ LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是"如果数据最近被访问过,那 ...

最新文章

  1. mysql表名不区分大小写_设置mysql表名不区分大小写
  2. 无线网卡服务端工具airserv-ng
  3. 谈谈Silverlight 2中的视觉状态管理 Part1
  4. webService学习6:解析组件 's:schema' 时出错。在该组件中检测到 's:schem
  5. Unrecognised tag: 'build'
  6. 第三次学JAVA再学不好就吃翔(part109)--LineNumberReader类
  7. Spark 分析网站排名热度
  8. linux 挂载exfat u盘 yum,centos挂载exfat u盘
  9. boost python导出c++ map_使用Boost生成的Python模块:与C++签名不匹配
  10. Gartner最新数据报告 WP系统仅剩1%
  11. oracle Group by 分组查询后,分页
  12. OpenCV:图片的几何变换
  13. [opencv] Unsupported depth of input image
  14. BZOJ.4832.[Lydsy1704月赛]抵制克苏恩(期望DP)
  15. [JNI]开发实例(1)封装libjpeg库 保证图片质量压缩图片
  16. 批量删除多个 Excel 空白工作表
  17. 俄勒冈之旅_以您记得的方式玩俄勒冈之路
  18. ROS下同步通信topic和异步通信service的异同
  19. 虚拟语气--专升本语法
  20. 全面了解Windows Server 2003 和 Windows XP 附带的系统服务

热门文章

  1. Atitit.Base64编码原理与实现设计
  2. paip.获取文件名从路径uapi java python php总结...
  3. paip.python错误解决22
  4. 世界互联网大会乌镇峰会:14项世界互联网领先科技成果发布
  5. CSDN创始人董事长蒋涛对话阿里云张献涛:距离云计算终极目标还有多远?
  6. 机器学习笔记(三十一):集成学习
  7. SpringCloud 应用在 Kubernetes 上的最佳实践(二):部署篇 (开发部署)
  8. 学习成果区块链问世,中科宇创为人才能力认证提供权威账本
  9. IT程序猿应该投资些什么
  10. 【优化覆盖】基于matlab粒子群算法求解传感器覆盖优化问题【含Matlab源码 598期】