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 修改文件指定行的方法
May 15 Python
Python and、or以及and-or语法总结
Apr 14 Python
python学习之面向对象【入门初级篇】
Jan 21 Python
python 中的int()函数怎么用
Oct 17 Python
python实现简单中文词频统计示例
Nov 08 Python
Python爬虫获取整个站点中的所有外部链接代码示例
Dec 26 Python
[原创]Python入门教程4. 元组基本操作
Oct 31 Python
Python使用sax模块解析XML文件示例
Apr 04 Python
python3实现二叉树的遍历与递归算法解析(小结)
Jul 03 Python
100行Python代码实现每天不同时间段定时给女友发消息
Sep 27 Python
python3.5的包存放的具体路径
Aug 16 Python
使用Python爬取Json数据的示例代码
Dec 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
PHPLog php 程序调试追踪工具
2009/09/09 PHP
php 代码优化之经典示例
2011/03/24 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
php 批量添加多行文本框textarea一行一个
2014/06/03 PHP
Laravel框架实现定时发布任务的方法
2018/08/16 PHP
用javascript动态调整iframe高度的代码
2007/04/10 Javascript
javascript 特殊字符串
2009/02/25 Javascript
ASP.NET jQuery 实例13 原创jQuery文本框字符限制插件-TextArea Counter
2012/02/03 Javascript
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
在web中js实现类似excel的表格控件
2016/09/01 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
15个非常实用的JavaScript代码片段
2016/12/18 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
使用proxy实现一个更优雅的vue【推荐】
2018/06/19 Javascript
简单谈谈javascript高级特性
2019/09/04 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
python将MongoDB里的ObjectId转换为时间戳的方法
2015/03/13 Python
使用python绘制3维正态分布图的方法
2018/12/29 Python
python输入多行字符串的方法总结
2019/07/02 Python
pandas 对日期类型数据的处理方法详解
2019/08/08 Python
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
NFL加拿大官方网上商店:NHLShop.ca
2019/03/12 全球购物
SQL语言面试题
2013/08/27 面试题
纪念建党演讲稿范文
2014/01/13 职场文书
网上卖盒饭创业计划书
2014/01/26 职场文书
个人培训自我鉴定
2014/03/28 职场文书
合作意向协议书范本
2014/03/31 职场文书
商业融资计划书
2014/04/29 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
运动会三级跳加油稿
2015/07/21 职场文书
用CSS3画一个爱心
2021/04/27 HTML / CSS
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
Rhit高效可视化Nginx日志查看工具
2021/11/01 Servers
Element-ui Layout布局(Row和Col组件)的实现
2021/12/06 Vue.js
数据设计之权限的实现
2022/08/05 MySQL