📜  LRU完整表格(1)

📅  最后修改于: 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算法。