python实现LRU热点缓存及原理


Posted in Python onOctober 29, 2019

LRU

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

基于列表+Hash的LRU算法实现。

  • 访问某个热点时,先将其从原来的位置删除,再将其插入列表的表头
  • 为使读取及删除操作的时间复杂度为O(1),使用hash存储热点的信息的键值
class LRUCaceh():
   def __init__(self, size=5):
     '''
     默认队列的长度为5
     使用列表来维护,使用字典来查询
     '''
     self.size = size
     self.cache = dict()
     self.key = []
 ​
   def get(self, key):
     '''
     获取缓存中的key的值
     '''
     if self.cache.get(key):
       self.key.remove(key)
       self.key.insert(0, key)
       return self.cache[key]
     return None
 ​
   def set(self, key, value):
     '''
     设置缓存,实现缓存淘汰
     '''
     if self.cache.get(key):
       self.cache.pop(key)
       self.cache[key] = value
       self.key.remove(key)
       self.key.insert(0, key)
     elif len(self.key) == self.size:
       old_key = self.key.pop()
       self.key.insert(0, key)
       self.cache.pop(old_key)
       self.cache[key] = value
     else:
       self.key.insert(0, key)
       self.cache[key] = value

总结

以上所述是小编给大家介绍的python实现LRU热点缓存及原理,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python调用机器喇叭发出蜂鸣声(Beep)的方法
Mar 23 Python
在Python的Flask中使用WTForms表单框架的基础教程
Jun 07 Python
mac PyCharm添加Python解释器及添加package路径的方法
Oct 29 Python
浅谈python下tiff图像的读取和保存方法
Dec 04 Python
Python批量生成特定尺寸图片及图画任意文字的实例
Jan 30 Python
Python处理时间日期坐标轴过程详解
Jun 25 Python
Python split() 函数拆分字符串将字符串转化为列的方法
Jul 16 Python
python图片二值化提高识别率代码实例
Aug 24 Python
Django项目使用ckeditor详解(不使用admin)
Dec 17 Python
Django 项目通过加载不同env文件来区分不同环境
Feb 17 Python
Python批量启动多线程代码实例
Feb 18 Python
Django User 模块之 AbstractUser 扩展详解
Mar 11 Python
Python 中的 import 机制之实现远程导入模块
Oct 29 #Python
Centos7 下安装最新的python3.8
Oct 28 #Python
Python any()函数的使用方法
Oct 28 #Python
PYTHON发送邮件YAGMAIL的简单实现解析
Oct 28 #Python
详解如何用python实现一个简单下载器的服务端和客户端
Oct 28 #Python
SELENIUM自动化模拟键盘快捷键操作实现解析
Oct 28 #Python
如何在VSCode上轻松舒适的配置Python的方法步骤
Oct 28 #Python
You might like
PHP判断数组是否为空的常用方法(五种方法)
2017/02/08 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
javaScript Array(数组)相关方法简述
2009/07/25 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
2015/07/17 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
卸载安装Node.js与npm过程详解
2016/08/15 Javascript
Bootstrap缩略图的创建方法
2017/03/22 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
NodeJS爬虫实例之糗事百科
2017/12/14 NodeJs
JS实现自定义弹窗功能
2018/08/08 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
2019/03/14 Javascript
微信小程序的授权实现过程解析
2019/08/02 Javascript
微信小程序跨页面数据传递事件响应实现过程解析
2019/12/19 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
使用python在本地电脑上快速处理数据
2017/06/22 Python
聊聊Python中的pypy
2018/01/12 Python
彻底搞懂Python字符编码
2018/01/23 Python
用python实现将数组元素按从小到大的顺序排列方法
2018/07/02 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2020/03/12 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
以太网Ethernet IEEE802.3
2013/08/05 面试题
《一株紫丁香》教学反思
2014/02/19 职场文书
航海技术专业毕业生求职信
2014/04/06 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
2015年幼儿园安全工作总结
2015/05/12 职场文书
工作服管理制度范本
2015/08/06 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书
六五普法心得体会2016
2016/01/21 职场文书
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python