- 缓存是一项从底层到高层都会广泛应用的技术,无论是前端还是后端。缓存是可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速率很快。
- 在python开发过程中,有一些函数的结果可能会被反复调用,如果这个函数耗时过大,那么我们如何通过缓存来提升他的开发效率呢?
LRU缓存
-
本文就来介绍一下LRU缓存到底是个什么鬼。
-
不同的编程语言,会有不同的缓存策略。例如,通过哈希映射、优先级队列等实现缓存。因此,不同的编程语言,在缓存的解决方案面有很大的差异。
-
但是,在Python中,标准工具包
functools
实现了一种名为LRU(Least Recently Used)
的缓存策略,可以通过传入参数,来设定缓存最近多少次的计算结果,如果传入参数设为None
,那么会进行无限缓存。
Talk is Cheap, Show me the Code
- 同学们,下面我们就举一个斐波那契数列的例子,看看
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
- 来,同学们,见证奇迹的时刻到了。根据两个耗时对比,利用缓存的计算速度高了不止一个量级。
总结
- 在日常工作中,如果需要有对程序进行相应的优化,那么考虑一下LRU缓存,经济又实惠。
- 计算密集型的程序,条件允许的话,尽量使用LRU缓存技术。