python实现LRU算法
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算法相关推荐
- python模拟页面调度LRU算法
所谓LRU算法,是指在发生缺页并且没有空闲主存块时,把最近最少使用的页面换出主存块,腾出地方来调入新页面. 问题描述:一进程获得n个主存块的使用权,对于给定的进程访问页面次序,问当采用LRU算法时,输 ...
- Python列表模拟页面调度LRU算法(京东2016笔试题)
问题描述:一进程刚获得3个主存块的使用权,若该进程访问页面的次序是1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5.当采用LRU算法时,发生的缺页次数是多少? 解析:所谓LRU算法 ...
- 【腾讯三面】你能现场写一下LRU算法吗?
" 金三银四,又到了换工作的黄金期.各位小伙伴们都准备好了吗? " 这句话大家是不是最近已经要看吐了呢? 每当这个时候,就证明招聘旺季又来啦~ 春招.校招.社招-- 那你真的准备好 ...
- Redis的LRU算法
2019独角兽企业重金招聘Python工程师标准>>> 整理自官方文档:将redis当做使用LRU算法的缓存来使用 当Redis被当做缓存来使用,当你新增数据时,让它自动地回收旧数据 ...
- LRU算法模拟器(基于Java和VUE前端实现)
目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 ...
- 【学习笔记】【计算机组成原理】定点数与浮点数的运算;LRU算法实现;cache命中;流水线冲突、冲刷;
目录 前言 一.计算机组成原理-背景 1.计算机的发展简史 2.计算机的分类 3.计算机的体系结构 4.计算机的层次与编程语言 5.计算机的计算单位 6.计算机的字符与编码集 二.计算机组成原理-组成 ...
- linux页面算法源码,LRU算法原理解析
LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的. 现代操作系统提供了一种对主存的抽象概念虚拟内存,来对主存进行更好地管理.他将主存 ...
- LRU算法 -- 链表 完整实现
LRU算法(Least Recently Used) 算是我们经常遇到的一种淘汰算法,其中内存管理模块进行内存页回收时有用到,针对不经常使用的内存页,LRU淘汰策略能够将该内存页回收给操作系统. 属于 ...
- python数据结构与算法总结
python常用的数据结构与算法就分享到此处,本月涉及数据结构与算法的内容有如下文章: <数据结构和算法对python意味着什么?> <顺序表数据结构在python中的应用> ...
最新文章
- Android Toast自己定义Toast例子
- linux中yum怎么安装服务器,yum安装(linux如何安装yum)
- [转]TensorFlow如何进行时序预测
- C++ Primer 5th笔记(chap 19 特殊工具与技术)控制内存分配
- 强网杯2019 Copperstudy
- centos7.3安装nodejs
- Linux中fork函数的作用及用法
- php 获取今天数据,ThinkPHP 按日期获取今天获取本周获取本月获取今年数据
- 所谓工作能力强,就看这5件事
- mysql 逆序排序_将一组乱序的字符进行排序进行升序和逆序输出
- 通过了微软的SharePoint认证考试(70-542: Microsoft Office SharePoint Server 2007 - Application Development)...
- fastjson.JSONObject之对象与JSON转换方法
- Android 隐藏ImageView
- linux 运行ctl文件_[命令] Linux 命令 systemctl(程序单元启动和管理)
- 2021深育杯-网络安全大赛专业竞赛部分wp
- vant swipe点击切换
- 关于先有鸡还是先有蛋,终于有正确答案了
- 小学生能学计算机编程是什么,小学生为什么要学编程?小学生学习编程怎么样?...
- 区块链技术的风险!(转载)
- RabbitMQ面试要点