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获取服务器信息的最简单实现方法
Mar 05 Python
Python两个内置函数 locals 和globals(学习笔记)
Aug 28 Python
python学习教程之Numpy和Pandas的使用
Sep 11 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
Jan 17 Python
pandas多级分组实现排序的方法
Apr 20 Python
浅谈python中字典append 到list 后值的改变问题
May 04 Python
python爬取网页内容转换为PDF文件
Jul 28 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
Jun 07 Python
python2 与 python3 实现共存的方法
Jul 12 Python
python try except 捕获所有异常的实例
Oct 18 Python
python简单贪吃蛇开发
Jan 28 Python
Python项目实战之使用Django框架实现支付宝付款功能
Feb 23 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
各种战术和打法的原创者
2020/03/04 星际争霸
PHP获取文件后缀名的三个函数
2012/10/15 PHP
php简单操作mysql数据库的类
2015/04/16 PHP
php创建图像具体步骤
2017/03/13 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
PHP中危险的file_put_contents函数详解
2017/11/04 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
2020/09/17 PHP
JavaScript使用prototype定义对象类型(转)[
2006/12/22 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
namespace.js Javascript的命名空间库
2011/10/11 Javascript
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
javascript中通过arguments参数伪装方法重载
2014/10/08 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
浅析jQuery Ajax通用js封装
2016/06/22 Javascript
jQuery插件FusionCharts绘制2D双折线图效果示例【附demo源码】
2017/04/14 jQuery
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
JavaScript基于activexobject连接远程数据库SQL Server 2014的方法
2017/07/12 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
2017/07/28 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
2020/08/03 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
简单介绍Python中的round()方法
2015/05/15 Python
python函数装饰器用法实例详解
2015/06/04 Python
图文详解WinPE下安装Python
2016/05/17 Python
Python实现的圆形绘制(画圆)示例
2018/01/31 Python
Pytorch中accuracy和loss的计算知识点总结
2019/09/10 Python
python实现的读取网页并分词功能示例
2019/10/29 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
澳大利亚汽车零部件、音响及配件超市:Automotive Superstore
2018/06/19 全球购物
怎样声明接口
2014/09/19 面试题
最新教师自我评价分享
2013/11/12 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
2014年公务员工作总结
2014/11/18 职场文书
高三英语教学反思
2016/03/03 职场文书
运动会主持人开幕词
2016/03/04 职场文书
Vue的过滤器你真了解吗
2022/02/24 Vue.js
详解OpenCV曝光融合
2022/04/29 Python