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使用函数默认值实现函数静态变量的方法
Aug 18 Python
Python中的面向对象编程详解(上)
Apr 13 Python
Python实现根据IP地址和子网掩码算出网段的方法
Jul 30 Python
Python爬取京东的商品分类与链接
Aug 26 Python
基于python中pygame模块的Linux下安装过程(详解)
Nov 09 Python
详解Python字典小结
Oct 20 Python
Python数据类型之Number数字操作实例详解
May 08 Python
Pandas删除数据的几种情况(小结)
Jun 21 Python
Pytorch反向求导更新网络参数的方法
Aug 17 Python
Python中的None与 NULL(即空字符)的区别详解
Sep 24 Python
python工具——Mimesis的简单使用教程
Jan 16 Python
opencv检测动态物体的实现
Jul 21 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引用(&)
2014/09/04 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
2016/11/01 PHP
深入浅析PHP的session反序列化漏洞问题
2017/06/15 PHP
深入理解PHP的远程多会话调试
2017/09/21 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
jQuery中:only-child选择器用法实例
2015/01/03 Javascript
易被忽视的js事件问题总结
2016/05/14 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
jQuery回到顶部的代码
2016/07/09 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
Vue封装的可编辑表格插件方法
2018/08/28 Javascript
JS 音频可视化插件Wavesurfer.js的使用教程
2018/10/31 Javascript
详解如何制作并发布一个vue的组件的npm包
2018/11/10 Javascript
jQuery实现的中英文切换功能示例
2019/01/11 jQuery
微信小程序访问豆瓣电影api的实现方法
2019/03/31 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
Jquery使用each函数实现遍历及数组处理
2020/07/14 jQuery
详解JavaScript原型与原型链
2020/11/16 Javascript
python如何通过实例方法名字调用方法
2018/03/21 Python
对numpy中array和asarray的区别详解
2018/04/17 Python
对dataframe进行列相加,行相加的实例
2018/06/08 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
pytorch标签转onehot形式实例
2020/01/02 Python
Parts Express:音频、视频和扬声器的第一来源
2017/04/25 全球购物
澳大利亚在线百货商店:Real Smart
2017/08/13 全球购物
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
销售工作岗位职责
2013/12/24 职场文书
京剧自荐信
2014/01/26 职场文书
运动会方阵解说词
2014/02/12 职场文书
房展策划方案
2014/06/07 职场文书
社保代办委托书怎么写
2014/10/06 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
学风建设主题班会
2015/08/17 职场文书