以下是一个使用Python实现的简单LRU缓存:
class LRUCache:
def __init__(self, capacity):
self.capacity = capacity
self.cache = {}
self.key_order = []
def get(self, key):
if key in self.cache:
self.key_order.remove(key)
self.key_order.insert(0, key)
return self.cache[key]
else:
return None
def put(self, key, value):
if key in self.cache:
self.key_order.remove(key)
elif len(self.cache) >= self.capacity:
old_key = self.key_order.pop()
del self.cache[old_key]
self.cache[key] = value
self.key_order.insert(0, key)
def __str__(self):
return str(self.cache)
LRUCache类有三个主要方法:get(获取缓存条目),put(放入新的缓存条目)和str(返回当前的缓存状态)。它还具有以下属性:
- capacity:缓存可以容纳的最大数量。
- cache:一个用于存储缓存条目的字典。
- key_order:一个列表,其中包含缓存中所有键的顺序。该列表的第一个元素是最近使用的键。
在调用get(key)时,如果键存在于缓存中,则将其移动到key_order列表的开头以反映它是最近使用的键。如果键不存在,则返回None。
在调用put(key,value)时,如果指定的键已经存在于缓存中,则将其移到key_order的开头,并将其值更新为提供的值。否则,如果缓存已满,则将最后一个键从缓存中删除,并且也从key_order列表中删除。新的键/值对随后被添加到缓存和key_order列表中,并移动到其开头。
注意:这个实现不是线程安全的。在多线程环境下使用LRU缓存需要考虑同步问题。