LRU
LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。
实现原理
利用list记录key的次序,每次set,或get操作将key插入到list首位。
缓冲区满之后再出现set操作,移除末尾的key。
使用Python3 ,key in dict判断key是否出现过,Python2中应该为has_key
class LRUcache:
def __init__(self, size=3):
self.cache = {}
self.keys = []
self.size = size
def get(self, key):
if key in self.cache:
self.keys.remove(key)
self.keys.insert(0, key)
return self.cache[key]
else:
return None
def set(self, key, value):
if key in self.cache:
self.keys.remove(key)
self.keys.insert(0, key)
self.cache[key] = value
elif len(self.keys) == self.size:
old = self.keys.pop()
self.cache.pop(old)
self.keys.insert(0, key)
self.cache[key] = value
else:
self.keys.insert(0, key)
self.cache[key] = value
if __name__ == '__main__':
test = LRUcache()
test.set('a',2)
test.set('b',2)
test.set('c',2)
test.set('d',2)
test.set('e',2)
test.set('f',2)
print(test.get('c'))
print(test.get('b'))
print(test.get('a'))
预期输出为
None
None
None