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

 

01-06 22:19