基于列表+Hash的LRU算法实现。

  • 访问某个热点时,先将其从原来的位置删除,再将其插入列表的表头

  • 为使读取及删除操作的时间复杂度为O(1),使用hash存储热点的信息的键值

 class LRUCache():
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热点缓存的更多相关文章

  1. LRU算法 缓存淘汰策略

    四种实现方式 LRU 1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也 ...

  2. Go -- LRU算法(缓存淘汰算法)(转)

    1. LRU1.1. 原理 LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”. ...

  3. 【面试题】LRU算法及编码实现LRU策略缓存

    概念 LRU(least recently used)就是将最近不被访问的数据给淘汰掉,LRU基于一种假设:认为最近使用过的数据将来被使用的概率也大,最近没有被访问的数据将来被使用的概率比较低. 原理 ...

  4. nginx+lua+storm的热点缓存的流量分发策略自动降级

    1.在storm中,实时的计算出瞬间出现的热点. 某个storm task,上面算出了1万个商品的访问次数,LRUMap 频率高一些,每隔5秒,去遍历一次LRUMap,将其中的访问次数进行排序,统计出 ...

  5. LeetCode题解: LRU Cache 缓存设计

    LeetCode题解: LRU Cache 缓存设计 2014年12月10日 08:54:16 邴越 阅读数 1101更多 分类专栏: LeetCode   版权声明:本文为博主原创文章,遵循CC 4 ...

  6. mybatis PageHelper分页插件 和 LRU算法缓存读取数据

    分页: PageHelper的优点是,分页和Mapper.xml完全解耦.实现方式是以插件的形式,对Mybatis执行的流程进行了强化,添加了总数count和limit查询.属于物理分页. 一.首先注 ...

  7. Python网络编程03 /缓存区、基于TCP的socket循环通信、执行远程命令、socketserver通信

    Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命令.socketserver通信 目录 Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命 ...

  8. 重学数据结构(三)——使用单链表实现LRU淘汰缓存机制

    使用单链表实现LRU(Least Recently Used)淘汰缓存机制 需求:存在一个单链表,在单链表尾部的都是越早之前添加的元素. 当元素被访问到时,会添加进缓存(也就是这个单链表中). 如果这 ...

  9. Python项目使用memcached缓存

    前言许多Web应用都将数据保存到MySQL这样的关系型数据库管理系统中,应用服务器从中读取数据并在浏览器中显示. 但随着数据量的增大.访问的集中,就会出现数据库的负担加重.数据库响应恶化. 网站显示延 ...

随机推荐

  1. python爬虫中文乱码问题(request方式爬取)

    https://blog.csdn.net/guoxinian/article/details/83047746   req = requests.get(url)返回的是类对象 其包括的属性有: r ...

  2. softmax求导、cross-entropy求导及label smoothing

    softmax求导 softmax层的输出为 其中,表示第L层第j个神经元的输入,表示第L层第j个神经元的输出,e表示自然常数. 现在求对的导数, 如果j=i,   1 如果ji, 2 cross-e ...

  3. 浅谈JS的toString

    任何一个对象都有toString()方法(默认继承自Object,自己可以重写),此方法返回一个字符串. var sayYo = function () { alert("sayYo2!&q ...

  4. you have new mail in /var/spool/mail/root !

    今天开发的同事告诉我,他在登录系统时老是提示you have new mail in /var/spool/mail/root ! 我一猜就知道他们肯定又自己写定时任务了,这样的事已经发生过好几回了, ...

  5. 【Ribbon篇四】Ribbon初步配置(2)

    一. 微服务消费者改造 注:修改microservicecloud-consumer-dept-80工程 1. pom.xml添加依赖 <!-- eureka client --> < ...

  6. 剑指Offer-5.用两个栈实现队列(C++/Java)

    题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析: 栈的特点是先进后出,队列的特点则是先进先出. 题目要求我们用两个栈来实现一个队列,栈和队列都有入栈 ...

  7. mysql里的insert

    insert不跟where 比如 insert into table (name) value('******')where id =1 肯定不行的 insert 语句 是插入语句,不跟条件的. 如果 ...

  8. FT_Get_Var error on comiling

    [Julian@julian-linux-t450 gtk]$ gcc `pkg-config --cflags gtk+-.` -o exam00 exam00.c `pkg-config --li ...

  9. 今天好像找到C语言延迟输出的原因了

    有时候运行c 第一行printf就像卡住一样.原来是这样<>>>>>>> int a; printf_s("input one number: ...

  10. 动手学深度学习14- pytorch Dropout 实现与原理

    方法 从零开始实现 定义模型参数 网络 评估函数 优化方法 定义损失函数 数据提取与训练评估 pytorch简洁实现 小结 针对深度学习中的过拟合问题,通常使用丢弃法(dropout),丢弃法有很多的 ...