LRU(Least Recently Used):最近最少使用
- redis列表实现
from collections import OrderedDict
class LRUdict(OrderedDict):
def __init__(self, cap):
self.cap = cap
self.items = OrderedDict()
def __setitem__(self, key, value):
# 当字典执行赋值时 调用当前方法
# 方法一
old_value = self.items.get(key)
# 判断存储的数据是否已经存在
if old_value is not None:
# 删除指令key
self.items.pop(key)
self.items[key] = value
elif len(self.items) < self.cap:
# 正常存储
self.items[key] = value
else:
# 触发淘汰
# popitem 可按顺序删除
self.items.popitem(last=False)
self.items[key] = value
# 方法二:
old_value = self.items.get(key)
# 判断存储的数据是否已经存在
if old_value is not None:
# 删除指令key
self.items.pop(key)
self.items[key] = value
if len(self.items) > self.cap:
self.items.popitem(last=False)
def __getitem__(self, item):
# 重写字典的取值方法 s = d['a']
# 当字典进行取值时 调用当前方法
value = self.items.get(item)
if value is not None:
# 字典中有这个key
self.items.pop(item)
self.items[item] = value
return value
if __name__=='__main__':
d = LRUdict(10)
for x in range(15):
d[x] = x
print(d.items)
print(d.items.get(10))
- 有序字典
class OrderedDict:
pass