python 缓存记忆化 @lru_cache()

使用装饰器lru_cache加速函数计算
lru是一种缓存淘汰算法
(least recently used)即最近最少使用淘汰算法

from functools import lru_cache
import time
#@lru_cache()
def fib(number:int) -> int:
    if number==0:
        return 0
    if number==1:
        return 1
    return fib(number-1)+fib(number-2)
start_time=time.time()
res=fib(33)
print(res)
end_time=time.time()
print(f'耗时:{end_time-start_time}s')
fib.cache_info()

不用lru_cache

3524578
耗时:1.365251064300537s

使用lru_cache

3524578
耗时: 0.000629425048828125s

lru_cache的定义如下,
第一个参数maxsize控制最大缓存数量,
第二个参数为True则严格检查被装饰函数的参数类型

def lru_cache(maxsize=128, typed=False):
    pass
缓存系统需要考虑的设计问题
  • 缓存穿透(频繁查询了一个一定不存在的数据) solution:bitmap/存储空结果5分钟
  • 缓存失效-雪崩效应(缓存设置了相同的失效时间,导致缓存挂掉,给压力到DB,发生雪崩)
  • 缓存击穿(设置了过期时间的key在某时间被超高并发的访问)
一般使用LRU策略处理溢出,Redis的RDB和AOF持久化策略来保证一定情况下的数据安全

你可能感兴趣的:(python 缓存记忆化 @lru_cache())