python實現LRU熱點緩存

基於列表+Hash的LRU算法實現。算法

  • 訪問某個熱點時,先將其從原來的位置刪除,再將其插入列表的表頭緩存

  • 爲使讀取及刪除操做的時間複雜度爲O(1),使用hash存儲熱點的信息的鍵值spa

 

 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
相關文章
相關標籤/搜索