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. 【pytorch】pytorch-backward()的理解
  2. HTTP简介、请求方法与响应状态码
  3. mysql 区分大小写(大小写敏感)配置
  4. 传输滤波器的选型及使用说明
  5. 程序员跳槽的10个建议
  6. 深度学习神经网络:改善与优化的方法
  7. 【OJ】华东师范大学Python程序设计OJ题解
  8. 透传模式(透明传输SeriaNet)详解
  9. 信源压缩编码 编程c语言,霍夫曼信源编码实验报告.docx
  10. centos nginx php5.3,centos6.2+nginx-1.2.3+php-5.3.17装配脚本
  11. 凸优化第二章凸集 2.3 保凸运算
  12. 如何搭建自己的wiki
  13. 易天光模块交期漫画故事
  14. supervisord使用
  15. SylixOS 共用中断号机制
  16. 从满腹经纶到入行小白:理论学习与实际应用的差距
  17. android mock测试资源,Android测试基础整理篇
  18. mysql误删库恢复操作
  19. 【我的新学期】学习季
  20. 一文8个步骤从0到1实现Python+Selenium自动化测试项目实战【建议收藏】

热门文章

  1. 用户需求计算机配置单,根据客户要求写的电脑配置单,5500元嫌贵:您还是再看看吧!...
  2. 真牛皮!unity和java就业前景
  3. 解读手机拍照的各个参数(文档模式)
  4. Conmi的正确答案——jQuery的ajaxSubmit的正确用法
  5. html能连接手机与电视吗,手机如何投屏到液晶电视上?用这4种方法轻松连接,相互告知吧!...
  6. tp小程序微信支付部分代码
  7. Angular2使用ng2-file-upload上传文件
  8. 读-李林峰-分布式服务框架和原理14-17
  9. mysql 从第几个字符串开始截取_MySQL截取字符串函数方法
  10. me shy是什么歌 抖音make_原来这才是抖音上最火爆的5首原版英文歌!