2024-03-16 10:04:58
本文就来介绍一下LRU缓存到底是个什么鬼。
不同的编程语言,会有不同的缓存策略。例如,通过哈希映射、优先级队列等实现缓存。因此,不同的编程语言,在缓存的解决方案面有很大的差异。
但是,在Python中,标准工具包functools
实现了一种名为LRU(Least Recently Used)
的缓存策略,可以通过传入参数,来设定缓存最近多少次的计算结果,如果传入参数设为None
,那么会进行无限缓存。
LRU
在递归问题上面的表现# 先来一个不用LRU的例子
import time
import functools
def fib(n):
if n <= 1:
return n
return fib(n - 1) + fib(n - 2)
t1 = time.time()
fib(30)
print(f"time take {time.time() - t1}s")
# time take 0.3282461166381836s
# 使用LRU
import time
import functools
@functools.lru_cache(maxsize=5)
def fib(n):
if n <= 1:
return n
return fib(n - 1) + fib(n - 2)
t2 = time.time()
fib(30)
print(f"time take {time.time() - t2}s")
# time take 1.7881393432617188e-05s