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中用pycurl监控http响应时间脚本分享
Feb 02 Python
详解Django中的ifequal和ifnotequal标签使用
Jul 16 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
Jul 30 Python
tensorflow实现softma识别MNIST
Mar 12 Python
Python中一行和多行import模块问题
Apr 01 Python
对Python中DataFrame按照行遍历的方法
Apr 08 Python
Python读取txt内容写入xls格式excel中的方法
Oct 11 Python
在PyCharm下使用 ipython 交互式编程的方法
Jan 17 Python
对Python3 * 和 ** 运算符详解
Feb 16 Python
tensorflow之自定义神经网络层实例
Feb 07 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
Feb 17 Python
Pytorch实现WGAN用于动漫头像生成
Mar 04 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以post形式发送xml的方法
2014/11/04 PHP
php获取系统变量方法小结
2015/05/29 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
对textarea框的代码调试,而且功能上使用非常方便,酷
2006/06/30 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
jquery延迟加载外部js实现代码
2013/01/11 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
JavaScript学习笔记整理之引用类型
2016/01/22 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
移动端基础事件总结与应用
2017/01/12 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
2017/02/22 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
js获取一组日期中最近连续的天数
2017/05/25 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
在React项目中使用Eslint代码检查工具及常见问题
2018/10/10 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
python设置检查点简单实现代码
2014/07/01 Python
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
python获取list下标及其值的简单方法
2016/09/12 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
2018/06/14 Python
Python 获取命令行参数内容及参数个数的实例
2019/12/20 Python
Django封装交互接口代码
2020/07/12 Python
法律专业推荐信范文
2013/11/29 职场文书
班训口号大全
2014/06/18 职场文书
2016年入党心得体会范文
2016/01/23 职场文书
护士心得体会范文
2016/01/25 职场文书
中国古代史学名著《战国策》概述
2019/08/09 职场文书
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python