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中使用PIPE操作Linux管道
Feb 04 Python
Python正则表达式匹配中文用法示例
Jan 17 Python
详解使用 pyenv 管理多个版本 python 环境
Oct 19 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
Apr 27 Python
python读写LMDB文件的方法
Jul 02 Python
判断python字典中key是否存在的两种方法
Aug 10 Python
Python使用pyshp库读取shapefile信息的方法
Dec 29 Python
Django实现CAS+OAuth2的方法示例
Oct 30 Python
解决Tensorflow 内存泄露问题
Feb 05 Python
pytorch 计算ConvTranspose1d输出特征大小方式
Jun 23 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
Python操作MySQL数据库的示例代码
Jul 13 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/08/26 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
thinkphp模板输出技巧汇总
2014/11/24 PHP
Smarty模板常见的简单应用分析
2016/11/15 PHP
php实现用户注册密码的crypt加密
2017/06/08 PHP
document对象execCommand的command参数介绍
2006/08/01 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
js 时间函数应用加、减、比较、格式转换的示例代码
2013/08/23 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
2016/05/30 Javascript
js实现对table的增加行和删除行的操作方法
2016/10/13 Javascript
微信小程序 WebSocket详解及应用
2017/01/21 Javascript
CodeMirror js代码加亮使用总结
2017/03/25 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
解决layui 表单元素radio不显示渲染的问题
2019/09/04 Javascript
JS实现轮播图效果
2020/01/11 Javascript
c++生成dll使用python调用dll的方法
2014/01/20 Python
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
python寻找list中最大值、最小值并返回其所在位置的方法
2018/06/27 Python
Django之form组件自动校验数据实现
2020/01/14 Python
基于Pytorch SSD模型分析
2020/02/18 Python
美国滑雪板和装备购物网站:Skis.com
2018/12/20 全球购物
美国职棒大联盟的官方手套、球和头盔:Rawlings
2020/02/15 全球购物
地球鞋加拿大官网:Earth Shoes Canada
2020/11/17 全球购物
房屋登记授权委托书范本
2014/10/09 职场文书
死亡证明书样本说明
2014/10/18 职场文书
失恋33天观后感
2015/06/11 职场文书
婚宴新娘致辞
2015/07/28 职场文书
2016年清明节寄语
2015/12/04 职场文书
创业计划书详解
2019/07/19 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
ConstraintValidator类如何实现自定义注解校验前端传参
2021/06/18 Java/Android
Redis 常见使用场景
2021/08/30 Redis