defhuancun_info(fun_name):
dict_info ={}deffun(*args,**kwargs):
key ="-".join(args)if key notin dict_info.keys():
info = fun_name(*args,**kwargs)
dict_info[key]= info
return info
else:print("已缓存,直接返回数据")return dict_info[key]return fun
import re
import ast
deffile_cache(fun_name):deffun(*args,**kwargs):
filename ="-".join(args)# 文件名中不能包含\/:*?"<>|,使用正则表达式将这些数据替换成空
pattern = re.compile("""(\\\|/|:|\*|\?|\"|<|>|\|)""")
filename = pattern.sub("", filename)
cache_path = f"{filename}.txt"ifnot os.path.exists(cache_path):
result = fun_name(*args,**kwargs)withopen(cache_path,"w", encoding="utf-8")as f:# 强制类型转换
result =str(result)# 使用write写入文件操作,参数必须是字符串
f.write(result)return result
else:withopen(cache_path, encoding="utf-8")as f:
result = f.read()# 使用literal_eval函数将文件中读取的数据转换为原来的数据
result = ast.literal_eval(result)return result
return fun
优点:数据能够长期保存。
缺点:如果缓存数据较多,会占用较大的磁盘空间。如果缓存的文件较多,文件不容易管理。
基于redis的缓存
import redis
defredis_cache(fun_name):
con = redis.Redis()deffun(*args,**kwargs):
key ="-".join(args)ifnot con.exists(key):
info = fun_name(*args,**kwargs)
con.set(key, info)return info
else:print("数据已缓存")return con.get(key)return fun