📜  Python – LRU 缓存(1)

📅  最后修改于: 2023-12-03 15:34:06.595000             🧑  作者: Mango

Python – LRU 缓存

介绍

LRU(Least Recently Used)缓存是一种缓存算法,它将最近最少使用的数据项淘汰,以在缓存容量达到上限时腾出空间。在基于内存的持久性存储系统中,LRU可以在一定程度上提高系统性能。

Python中的“functools”模块提供了一个装饰器“lru_cache()”,可以使用它来缓存函数的结果,从而加速重复调用。

示例代码
from functools import lru_cache

@lru_cache(maxsize=128)
def fibonacci(n):
    if n < 2:
        return n
    else:
        return fibonacci(n-1) + fibonacci(n-2)

print([fibonacci(n) for n in range(16)])

上面的代码计算了斐波那契数列的前16个数,使用了“lru_cache()”装饰器来缓存函数结果。由于斐波那契数列的计算是一个递归过程,如果每次都要重新计算,会非常耗费时间。当调用同一个n时,使用缓存后,函数结果将直接从缓存中返回,而不需要重新计算,从而加速计算。

参数说明

装饰器“lru_cache()”可以使用两个参数:

  • maxsize:缓存中最多可以存储多少个条目,超过该数量时会按LRU算法淘汰最少使用的条目。默认值为128。
  • typed:如果设为True,将对参数类型进行区分,例如将参数1和1.0视为不同参数。默认值为False。
注意事项
  • 使用缓存后,函数的执行速度可能会加速,但同时也会占用更多的内存。因为缓存需要占用内存来存储结果。
  • 由于缓存是基于函数参数的,如果函数参数是可变类型的对象(比如列表、集合等),则缓存会失效。因为不同的对象虽然值相同,但其内存地址不同,导致缓存无法命中。