LRU算法及实现方式
LRUCache(Least-Recently-Used)
替换掉最近最少使用的对象
- 缓存剔除策略,当缓存空间不够用的时候需要一种方式剔除key
- 通过使用一个循环双端队列不断把最新访问的key放到队头实现
- 先进先出,放到队尾则是最后出
实现
利用dict+collections.OrderedDict
- dict作为k/v键值对的缓存
- OrderedDict用来实现最近访问的key
# capacity : 容量
class LRUCache:
def __init__(self, capacity=128):
self.od = OrderedDict() # 按key的创建时间排序
self.capacity = capacity
def get(self, key): # 每次访问更新最新使用的key,move_to_end放到队尾就是最新
if key in self.od:
val = self.od[key]
self.od.move_to_end(key)
return val
else:
return -1
def put(self, key, value):
if key in self.od:
del self.od[key]
self.od[key] = value # 先删key再赋值就是将key放到队尾,OrderedDict特性,新键在队尾
else:
self.od[key] = value
# 判断当前容量是否满了
if (len(self.od) > self.capacity):
self.od[key].popitem(last=False) # 从队头剔除元素

浙公网安备 33010602011771号