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中的len()函数的使用
Apr 07 Python
Django实现图片文字同时提交的方法
May 26 Python
Python使用urllib2模块实现断点续传下载的方法
Jun 17 Python
Python正则获取、过滤或者替换HTML标签的方法
Jan 28 Python
python生成二维码的实例详解
Oct 29 Python
python 阶乘累加和的实例
Feb 01 Python
Python openpyxl读取单元格字体颜色过程解析
Sep 03 Python
Python实现TCP通信的示例代码
Sep 09 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
Feb 28 Python
Python小整数对象池和字符串intern实例解析
Mar 21 Python
Python爬虫如何应对Cloudflare邮箱加密
Jun 24 Python
Django与AJAX实现网页动态数据显示的示例代码
Feb 24 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程序之die调试法 快速解决错误
2009/09/17 PHP
深入探究PHP的多进程编程方法
2015/08/18 PHP
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
深入理解JavaScript作用域和作用域链
2011/10/21 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
jQuery制作仿Mac Lion OS滚动条效果
2015/02/10 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
js实现复制功能(多种方法集合)
2018/01/06 Javascript
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
阿望教你用vue写扫雷小游戏
2020/01/20 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
Python使用urllib2模块实现断点续传下载的方法
2015/06/17 Python
Python自动登录126邮箱的方法
2015/07/10 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
python使用插值法画出平滑曲线
2018/12/15 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
TensorFlow-gpu和opencv安装详细教程
2020/06/30 Python
详解CSS3伸缩布局盒模型Flex布局
2018/08/20 HTML / CSS
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
出纳岗位职责
2013/11/09 职场文书
乡镇网格化管理实施方案
2014/03/23 职场文书
实习生矿工检讨书
2014/10/13 职场文书
接收函格式
2015/01/30 职场文书
2015年党员公开承诺事项
2015/04/27 职场文书
纪委立案决定书
2015/06/24 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
浅谈Python数学建模之线性规划
2021/06/23 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
2021/06/23 Python
详解 TypeScript 枚举类型
2021/11/02 Javascript
Java 垃圾回收超详细讲解记忆集和卡表
2022/04/08 Java/Android