zoukankan      html  css  js  c++  java
  • python实现LRU热点缓存

    基于列表+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

     

  • 相关阅读:
    等宽布局和flex
    antd按需加载
    linux-redis cluster集群(redis5.x)
    linux-mysql-主从同步
    mysql-行转列
    Spring Bean 作用域
    ArrayList、LinkedList区别(jdk8)
    java类及实例初始化顺序
    线程池-结构
    GIT基础
  • 原文地址:https://www.cnblogs.com/ddpj/p/11754610.html
Copyright © 2011-2022 走看看