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类型强制转换long to int的代码
Feb 10 Python
python实现异步回调机制代码分享
Jan 10 Python
Python内置数据类型详解
Aug 18 Python
python计算牛顿迭代多项式实例分析
May 07 Python
Python实现的彩票机选器实例
Jun 17 Python
详解Python中contextlib上下文管理模块的用法
Jun 28 Python
django启动uwsgi报错的解决方法
Apr 08 Python
Python带动态参数功能的sqlite工具类
May 26 Python
Python中numpy模块常见用法demo实例小结
Mar 16 Python
python 多进程和协程配合使用写入数据
Oct 30 Python
Python实现小黑屋游戏的完整实例
Jan 06 Python
Pandas直接读取sql脚本的方法
Jan 21 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
Zend引擎的发展 [15]
2006/10/09 PHP
PHP输出时间差函数代码
2013/01/28 PHP
php内嵌函数用法实例
2015/03/20 PHP
PHP静态成员变量
2017/02/14 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
javascript JSON操作入门实例
2010/04/16 Javascript
幻灯片带网页设计中的20个奇妙应用示例小结
2012/05/27 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
js选择并转移导航菜单示例代码
2014/08/19 Javascript
JavaScript DOM基础
2015/04/13 Javascript
jquery实现简单的全选和反选功能
2016/01/02 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
2017/01/23 Javascript
js实现方块上下左右移动效果
2017/08/17 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
JS实现checkbox互斥(单选)功能示例
2019/05/04 Javascript
[02:36]DOTA2上海特锦赛 回忆电竞生涯的重要瞬间
2016/03/25 DOTA
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
python装饰器使用方法实例
2013/11/21 Python
在主机商的共享服务器上部署Django站点的方法
2015/07/22 Python
详解python中的文件与目录操作
2017/07/11 Python
深入分析python中整型不会溢出问题
2018/06/18 Python
详解Python3定时器任务代码
2019/09/23 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
ALEX AND ANI:手镯,项链,耳环和更多
2017/04/20 全球购物
旅游专业职业生涯规划范文
2014/01/13 职场文书
小学教师自我剖析材料
2014/09/29 职场文书
2015年企业工作总结范文
2015/04/28 职场文书
大学团日活动总结书
2015/05/11 职场文书
会计主管竞聘书
2015/09/15 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL
MySQL中CURRENT_TIMESTAMP的使用方式
2021/11/27 MySQL
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL