LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。

python中有一个标准库的类的OrderedDict,该类有以下两个方法用来实现LRU算法就十分简单:

  • popitem(last=True):有序字典的 popitem() 方法移除并返回一个 (key, value) 键值对。 如果 last 值为真,则按 LIFO 后进先出的顺序返回键值对,否则就按 FIFO 先进先出的顺序返回键值对。
  • move_to_end(key, last=True):将现有 key 移动到有序字典的任一端。 如果 last 为真值(默认)则将元素移至末尾;如果 last 为假值则将元素移至开头。如果 key 不存在则会触发 KeyError

代码实现:

from collections import OrderedDict, defaultdictclass LRU:def __init__(self, capacity=128):self.capacity = capacity    # 缓存容量self.cache = OrderedDict()  # 有序字典缓存def put(self, key, value):"""数据录入缓存"""if key in self.cache:# 若数据已存在,表示命中一次,需要把数据移到缓存队列末端self.cache.move_to_end(key)returnif len(self.cache) >= self.capacity:# 若缓存已满,则需要淘汰最早没有使用的数据self.cache.popitem(last=False)# 录入缓存self.cache[key]=valuedef travel(self):"""遍历key"""for key in self.cache.keys():print(key)if __name__ == '__main__':l = LRU(3)       # 实例化缓存容量为3l.put('a','aa')  # 此时缓存未满,则录入数据al.put('b','bb')  # 此时缓存未满,则录入数据bl.put('c','cc')  # 此时缓存未满,则录入数据cl.put('a','aa')  # 此时缓存已满,但是a已存在缓存中,则命中一次# l.travel()     # 输出 b c al.put('d','dd')  # 此时缓存已满,淘汰掉最久不用的bl.travel()       # 输出 c a d

python实现LRU算法相关推荐

  1. python模拟页面调度LRU算法

    所谓LRU算法,是指在发生缺页并且没有空闲主存块时,把最近最少使用的页面换出主存块,腾出地方来调入新页面. 问题描述:一进程获得n个主存块的使用权,对于给定的进程访问页面次序,问当采用LRU算法时,输 ...

  2. Python列表模拟页面调度LRU算法(京东2016笔试题)

    问题描述:一进程刚获得3个主存块的使用权,若该进程访问页面的次序是1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5.当采用LRU算法时,发生的缺页次数是多少? 解析:所谓LRU算法 ...

  3. 【腾讯三面】你能现场写一下LRU算法吗?

    " 金三银四,又到了换工作的黄金期.各位小伙伴们都准备好了吗? " 这句话大家是不是最近已经要看吐了呢? 每当这个时候,就证明招聘旺季又来啦~ 春招.校招.社招-- 那你真的准备好 ...

  4. Redis的LRU算法

    2019独角兽企业重金招聘Python工程师标准>>> 整理自官方文档:将redis当做使用LRU算法的缓存来使用 当Redis被当做缓存来使用,当你新增数据时,让它自动地回收旧数据 ...

  5. LRU算法模拟器(基于Java和VUE前端实现)

    目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 ...

  6. 【学习笔记】【计算机组成原理】定点数与浮点数的运算;LRU算法实现;cache命中;流水线冲突、冲刷;

    目录 前言 一.计算机组成原理-背景 1.计算机的发展简史 2.计算机的分类 3.计算机的体系结构 4.计算机的层次与编程语言 5.计算机的计算单位 6.计算机的字符与编码集 二.计算机组成原理-组成 ...

  7. linux页面算法源码,LRU算法原理解析

    LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的. 现代操作系统提供了一种对主存的抽象概念虚拟内存,来对主存进行更好地管理.他将主存 ...

  8. LRU算法 -- 链表 完整实现

    LRU算法(Least Recently Used) 算是我们经常遇到的一种淘汰算法,其中内存管理模块进行内存页回收时有用到,针对不经常使用的内存页,LRU淘汰策略能够将该内存页回收给操作系统. 属于 ...

  9. python数据结构与算法总结

    python常用的数据结构与算法就分享到此处,本月涉及数据结构与算法的内容有如下文章: <数据结构和算法对python意味着什么?> <顺序表数据结构在python中的应用> ...

最新文章

  1. Android Toast自己定义Toast例子
  2. linux中yum怎么安装服务器,yum安装(linux如何安装yum)
  3. [转]TensorFlow如何进行时序预测
  4. C++ Primer 5th笔记(chap 19 特殊工具与技术)控制内存分配
  5. 强网杯2019 Copperstudy
  6. centos7.3安装nodejs
  7. Linux中fork函数的作用及用法
  8. php 获取今天数据,ThinkPHP 按日期获取今天获取本周获取本月获取今年数据
  9. 所谓工作能力强,就看这5件事
  10. mysql 逆序排序_将一组乱序的字符进行排序进行升序和逆序输出
  11. 通过了微软的SharePoint认证考试(70-542: Microsoft Office SharePoint Server 2007 - Application Development)...
  12. fastjson.JSONObject之对象与JSON转换方法
  13. Android 隐藏ImageView
  14. linux 运行ctl文件_[命令] Linux 命令 systemctl(程序单元启动和管理)
  15. 2021深育杯-网络安全大赛专业竞赛部分wp
  16. vant swipe点击切换
  17. 关于先有鸡还是先有蛋,终于有正确答案了
  18. 小学生能学计算机编程是什么,小学生为什么要学编程?小学生学习编程怎么样?...
  19. 区块链技术的风险!(转载)
  20. RabbitMQ面试要点

热门文章

  1. ST480的驱动分析(三轴磁力计ST480MC)
  2. Android:读取系统短信
  3. B. Obtain Two Zeroes(公式推导)
  4. Windows7 出现可能需要其他登录信息
  5. 从数据分析角度看《啥是佩奇》
  6. sql查询结果转化为JSON数据格式
  7. 拿下80%直播平台,视频云成了腾讯云突围的秘密武器
  8. 洛谷P1331 海战(DFS)
  9. win10内存占用很高,关闭所有应用程序依然降不下来(win11)
  10. Landscape design-工艺