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 相关文章推荐
python3 shelve模块的详解
Jul 08 Python
python opencv设置摄像头分辨率以及各个参数的方法
Apr 02 Python
Centos 升级到python3后pip 无法使用的解决方法
Jun 12 Python
基于Python实现迪杰斯特拉和弗洛伊德算法
May 27 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
Jul 09 Python
Python内置方法实现字符串的秘钥加解密(推荐)
Dec 09 Python
Python pandas如何向excel添加数据
May 22 Python
Python sorted对list和dict排序
Jun 09 Python
基于tensorflow for循环 while循环案例
Jun 30 Python
python openCV自制绘画板
Oct 27 Python
python Pexpect模块的使用
Dec 25 Python
python自动计算图像数据集的RGB均值
Jun 18 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
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
PHP脚本的10个技巧(7)
2006/10/09 PHP
php基于socket实现SMTP发送邮件的方法
2015/03/05 PHP
Yii框架的布局文件实例分析
2019/09/04 PHP
javascript学习总结之js使用技巧
2015/09/02 Javascript
jQuery进行组件开发完整实例
2015/12/15 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
详解webpack介绍&安装&常用命令
2017/06/29 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
vue穿梭框实现上下移动
2021/01/29 Vue.js
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
python操作 hbase 数据的方法
2016/12/18 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
python学生信息管理系统(初级版)
2018/10/17 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
解决Python计算矩阵乘向量,矩阵乘实数的一些小错误
2019/08/26 Python
python创建n行m列数组示例
2019/12/02 Python
python属于解释型语言么
2020/06/15 Python
python爬虫快速响应服务器的做法
2020/11/24 Python
Python类型转换的魔术方法详解
2020/12/23 Python
详解Pymongo常用查询方法总结
2021/01/29 Python
计算机应用毕业生自荐信
2013/10/23 职场文书
房展策划方案
2014/06/07 职场文书
食品工程专业求职信
2014/06/15 职场文书
考试作弊万能检讨书
2014/10/19 职场文书
2014年绿化工作总结
2014/12/09 职场文书
2015年师德表现自我评价
2015/03/05 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
导游词之镇江焦山
2019/11/21 职场文书
html+css实现赛博朋克风格按钮
2021/05/26 HTML / CSS
python实现双向链表原理
2022/05/25 Python