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代码实例
Feb 04 Python
Python基于动态规划算法计算单词距离
Jul 25 Python
一些常用的Python爬虫技巧汇总
Sep 28 Python
Python 使用os.remove删除文件夹时报错的解决方法
Jan 13 Python
解决python xlrd无法读取excel文件的问题
Dec 25 Python
python制作抖音代码舞
Apr 07 Python
Python2和Python3中@abstractmethod使用方法
Feb 04 Python
Python数据结构dict常用操作代码实例
Mar 12 Python
在python里创建一个任务(Task)实例
Apr 25 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
OpenCV-Python实现人脸磨皮算法
Jun 07 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
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
2011/08/12 PHP
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
利用PHP实现图片等比例放大和缩小的方法详解
2013/06/06 PHP
php打开文件fopen函数的使用说明
2013/07/05 PHP
PHP has encountered a Stack overflow问题解决方法
2014/11/03 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
PHP实现十进制数字与二十六进制字母串相互转换操作示例
2018/08/10 PHP
浅谈PHP匿名函数和闭包
2019/03/08 PHP
javascript实现div浮动在网页最顶上并带关闭按钮效果实例
2013/08/13 Javascript
jQuery插件分享之分页插件jqPagination
2014/06/06 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
jQuery菜单插件用法实例
2015/07/25 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
Angular表格神器ui-grid应用详解
2017/09/29 Javascript
微信小程序当前时间时段选择器插件使用方法详解
2018/12/28 Javascript
解决vue打包后刷新页面报错:Unexpected token
2019/08/27 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
2020/02/17 Javascript
vue使用exif获取图片经纬度的示例代码
2020/12/11 Vue.js
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
[38:32]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第二局
2016/02/26 DOTA
[37:37]DAC2018 4.4 淘汰赛 Optic vs Mineski 第二场
2018/04/05 DOTA
python单元测试unittest实例详解
2015/05/11 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
python3爬取数据至mysql的方法
2018/06/26 Python
Python Flask框架扩展操作示例
2019/05/03 Python
python psutil模块使用方法解析
2019/08/01 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
python range实例用法分享
2020/02/06 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
Django权限控制的使用
2021/01/07 Python
牧马人澳大利亚官网:Wrangler澳大利亚
2019/10/08 全球购物
优秀应届毕业生推荐信
2014/02/18 职场文书
历史专业大学生职业生涯规划书
2014/03/13 职场文书
校长新学期致辞
2015/07/30 职场文书