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模拟新浪微博登陆功能(新浪微博爬虫)
Dec 24 Python
Python中字典(dict)和列表(list)的排序方法实例
Jun 16 Python
python通过pil将图片转换成黑白效果的方法
Mar 16 Python
用实例分析Python中method的参数传递过程
Apr 02 Python
发布你的Python模块详解
Sep 15 Python
python生成词云的实现方法(推荐)
Jun 13 Python
Python基于动态规划算法解决01背包问题实例
Dec 06 Python
使用python Fabric动态修改远程机器hosts的方法
Oct 26 Python
Python读取excel指定列生成指定sql脚本的方法
Nov 28 Python
python pandas模块基础学习详解
Jul 03 Python
opencv 获取rtsp流媒体视频的实现方法
Aug 23 Python
Django集成富文本编辑器summernote的实现步骤
May 31 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数组是否为空的代码
2011/09/08 PHP
PHP下利用shell后台运行PHP脚本,并获取该脚本的Process ID的代码
2011/09/19 PHP
PHP中如何调用webservice的实例参考
2013/04/25 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
php获取域名的google收录示例
2014/03/24 PHP
php实现的ping端口函数实例
2014/11/12 PHP
php获取用户浏览器版本的方法
2015/01/03 PHP
静态html文件执行php语句的方法(推荐)
2016/11/21 PHP
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
JQuery动态添加和删除表格行的方法
2015/03/09 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
理解JavaScript中worker事件api
2015/12/25 Javascript
Nodejs爬虫进阶教程之异步并发控制
2016/02/15 NodeJs
JS+CSS3模拟溢出滚动效果
2016/08/12 Javascript
基于Require.js使用方法(总结)
2017/10/26 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
使用vue实现HTML页面生成图片的方法
2020/03/12 Javascript
python实现根据月份和日期得到星座的方法
2015/03/27 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
pandas.cut具体使用总结
2019/06/24 Python
Pandas之MultiIndex对象的示例详解
2019/06/25 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
圣彼得堡鲜花配送:Semicvetic
2020/09/15 全球购物
JAVA代码查错题
2014/10/10 面试题
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
银行存款证明样本
2014/01/17 职场文书
上课打牌的检讨书
2014/02/15 职场文书
《木笛》教学反思
2014/03/01 职场文书
车队安全员岗位职责
2015/02/15 职场文书
2015年感恩节活动总结
2015/03/24 职场文书
python 爬取豆瓣网页的示例
2021/04/13 Python
Pytest allure 命令行参数的使用
2021/04/18 Python
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL