📅  最后修改于: 2023-12-03 15:32:45.563000             🧑  作者: Mango
LRU(Least Recently Used)算法,是一种用于缓存管理的常见算法。LRU算法是基于以下思想:近期使用的数据比较可能在将来也会被使用,很久没有被使用的数据很可能永远不会被使用。
LRU算法维护一个缓存,当缓存已满时,会将最近最少使用的数据移出缓存,以便为新的数据腾出空间。
很多编程语言和数据库都有内置的LRU缓存实现。以下是用Python实现LRU缓存的示例代码:
from collections import OrderedDict
class LRUCache:
def __init__(self, capacity: int):
self.cache = OrderedDict()
self.capacity = capacity
def get(self, key: int) -> int:
if key not in self.cache:
return -1
self.cache.move_to_end(key)
return self.cache[key]
def put(self, key: int, value: int) -> None:
if key in self.cache:
self.cache.move_to_end(key)
self.cache[key] = value
if len(self.cache) > self.capacity:
self.cache.popitem(last=False)
上述代码使用Python标准库中的OrderedDict来实现LRU缓存。OrderedDict是一个字典的子类,它保留了插入元素的顺序。缓存中的每个键值对都在OrderedDict中被表示为一个键值对,缓存总大小由capacity参数指定。
get方法用于从缓存中获取一个值。如果该值不存在,则返回-1。如果该值存在,则将缓存中对应键值对的位置移动到OrderedDict的末尾,并返回该值。
put方法用于向缓存中添加一个键值对。如果该键已经存在,则将对应的值更新,并将该键值对位置移动到OrderedDict的末尾。如果cache已满,则需要将最近最少使用的键值对弹出缓存以腾出空间。注意,OrderedDict中popitem方法默认弹出末尾的键值对,而popitem(last=False)则弹出开头的键值对。由于LRU策略需要弹出最久未使用的键值对,所以使用last=False弹出开头的键值对实现LRU算法。