python实现LRU热点缓存及原理

yipeiwu_com5年前Python基础

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设计】网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

Python3.5局部变量与全局变量作用域实例分析

本文实例讲述了Python3.5局部变量与全局变量作用域。分享给大家供大家参考,具体如下: 1、局部变量与全局变量定义: 在子程序(函数)中定义的变量称为:局部变量;在程序顶级(一开始)...

python使用多线程编写tcp客户端程序

python使用多线程编写tcp客户端程序

今天在网上找了半天,发现很多关于此题目的程序都只能接收数据,所以随便找了个程序研究了一下,然后做出一些修改 代码如下: from socket import * import thr...

Python map和reduce函数用法示例

先看map。map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。 举例说明,比如我们有一个函数a(x)=x*2,...

Python连接DB2数据库

Python连接DB2数据库

在工作中遇到了这样的情况,项目中需要连接IBM的关系型数据库(DB2),关于这方面的库比较稀少,其中 ibm_db 是比较好用的一个库,网上也有教程,但是好像不准确,也不太详细,错误百出...

解决Mac下使用python的坑

操作系统:macOS High Sierra 10.13.3 Python3.6 因为此版本自带python2.7,就下载并安装了anaconda2的版本,结果使用的时候系统自带的pyt...