python实现LRU热点缓存及原理

作者:dpj999 时间:2022-01-08 01:26:15 

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热点缓存及原理,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

来源:https://www.cnblogs.com/ddpj/p/11754610.html

标签:python,LRU,缓存
0
投稿

猜你喜欢

  • python实现根据给定坐标点生成多边形mask的例子

    2022-03-22 14:40:15
  • Google的设计导引

    2008-04-06 14:18:00
  • django xadmin中form_layout添加字段显示方式

    2023-08-06 23:59:12
  • python常见读取语音的3种方法速度对比

    2021-03-08 11:12:33
  • Python命名空间及作用域原理实例解析

    2021-05-10 17:57:40
  • Python时间和字符串转换操作实例分析

    2023-04-15 22:58:08
  • 重写django的model下的objects模型管理器方式

    2023-04-24 15:10:14
  • Python协程实践分享

    2023-09-01 05:50:51
  • golang微服务框架基础Gin基本路由使用详解

    2023-07-23 10:31:19
  • 再谈 Web 字体的现状与未来[译]

    2009-11-24 13:55:00
  • Typecho插件实现添加文章目录的方法详解

    2023-05-25 07:19:04
  • js友好的表单验证程序vform

    2007-08-16 13:32:00
  • HTML和CSS中的视觉语义

    2010-07-09 13:08:00
  • python中map()与zip()操作方法

    2023-11-11 08:09:29
  • 18个超棒的Web和移动应用开发框架

    2011-03-31 17:04:00
  • ASP.Net MVC 布局页、模板页使用方法详细介绍

    2023-06-28 19:24:31
  • Jsp+Servlet实现简单登录注册查询

    2023-07-15 18:08:08
  • asp中判断是否是手机浏览器以及手机类型

    2014-12-06 09:33:05
  • 数据库大战: MS SQL Server & IBM DB2

    2009-08-25 16:24:00
  • JavaScript的事件代理比你想的要简单

    2009-04-27 12:40:00
  • asp之家 网络编程 m.aspxhome.com