python数据缓存

数据缓存方式

  1. 基于内存,如将数据信息存储到字典中;
  2. 基于文件,如将数据存储到文件中**.txt, **.csv,**.sqlite;
  3. 基于数据库(redis,memcache)。

基于字典即内存的缓存【装饰器】

def huancun_info(fun_name):
	dict_info = {}
	def fun(*args, **kwargs):
		key = "-".join(args)
		if key not in dict_info.keys():
			info = fun_name(*args, **kwargs)
			dict_info[key] = info
			return info
		else:
			print("已缓存,直接返回数据")
			return dict_info[key]
	return fun
  • 用法:使用@+huancun_info添加到需要缓存信息的函数名上方。
  • 缺点:缓存的数据保存周期短,即从缓存装饰器开始执行时到整个程序运行结束。
  • 优点:逻辑简单,容易。

基于普通文件的缓存

import re
import ast
def file_cache(fun_name):
	def fun(*args, **kwargs):
		filename = "-".join(args)
		# 文件名中不能包含\/:*?"<>|,使用正则表达式将这些数据替换成空
		pattern = re.compile("""(\\\|/|:|\*|\?|\"|<|>|\|)""")
		filename = pattern.sub("", filename)
		cache_path = f"{filename}.txt"
		if not os.path.exists(cache_path):
			result = fun_name(*args, **kwargs)
			with open(cache_path, "w", encoding="utf-8") as f:
				# 强制类型转换
				result = str(result)
				# 使用write写入文件操作,参数必须是字符串
				f.write(result)
			return result
		else:
			with open(cache_path, encoding="utf-8") as f:
				result = f.read()
				# 使用literal_eval函数将文件中读取的数据转换为原来的数据
				result = ast.literal_eval(result)
			return result
	return fun
  • 优点:数据能够长期保存。
  • 缺点:如果缓存数据较多,会占用较大的磁盘空间。如果缓存的文件较多,文件不容易管理。

 基于redis的缓存

  • 使用redis准备条件。
  • 优点:数据可以保存较长的时间,可以给con.set()设置第三个参数,用于记录数据保存的时间单位是秒,默认条件下是永久保存。
  • 缺点:使用redis数据库,需要导入redis包,安装redis数据库,开启redis服务,即具体准备条件
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值