flask使用flask_caching缓存数据
- 2025-03-26 12:03:26
- 开发
- 43
- shevechco
Flask-Caching 是Flask的一个扩展,为任何 Flask 应用程序添加了对各种后端的缓存支持。它基于 cachelib 运行,并通过统一的 API 支持 werkzeug 的所有原始缓存后端。
首先是安装,使用pip进行安装
pip install Flask-Caching
flask-caching内置的缓存类型CACHE_TYPE支持以下类型
NullCache
SimpleCache
FileSystemCache
RedisCache
RedisSentinelCache
RedisClusterCache
UWSGICache
MemcachedCache
SASLMemcachedCache
没中类型配置参数也有区别,分别如下:
NullCache:无缓存,其配置参数可以有:
CACHE_NO_NULL_WARNING:"warning" #不会抛出警告信息;
CACHE_DEFAULT_TIMEOUT:3600 #如果未指定超时,则使用默认超时,时间单位是秒。
SimpleCache:使用本地python字典进行存储,非线程安全,其配置参数可以有:
CACHE_DEFAULT_TIMEOUT:3600 #如果未指定超时,则使用默认超时,时间单位是秒;
CACHE_THRESHOLD:100 #最大缓存数;
CACHE_IGNORE_ERRORS:True #其值为True时,在删除过程中发生的任何错误将被忽略;其值为False时,在删除过程中第一个错误时停止删除;
FileSystemCache:使用文件系统来存储缓存的值,其配置参数可以有:
CACHE_DEFAULT_TIMEOUT:3600 #如果未指定超时,则使用默认超时,时间单位是秒;
CACHE_IGNORE_ERRORS:True #其值为True时,在删除过程中发生的任何错误将被忽略;其值为False时,在删除过程中第一个错误时停止删除;
CACHE_DIR:./cache #存储缓存的目录;
CACHE_THRESHOLD:100 #最大缓存数;
RedisCache:使用Redis作为缓存后端,其配置参数可以有:
CACHE_DEFAULT_TIMEOUT:3600 #如果未指定超时,则使用默认超时,时间单位是秒;
CACHE_KEY_PREFIX:'' #所有它都可以用于应用程序的应用程序使用相同的键;
CACHE_REDIS_HOST:127.0.0.1 #Redis 服务器主机;
CACHE_REDIS_PORT:6379#Redis 服务器端口,默认为 6379;
CACHE_REDIS_PASSWORD:"password" #服务器的 Redis 密码;
CACHE_REDIS_DB :0 #Redis db(从零开始的数字索引),默认为 0;
CACHE_REDIS_URL:| 连接到 Redis 服务器的 URL,例子redis://user:password@localhost:6379/2 ,配置了这个一键配置上面相关的就可以不用配了
RedisSentinelCache:使用Redis哨兵模型缓存,其配置参数可以有:
CACHE_KEY_PREFIX:'' #所有它都可以用于应用程序的应用程序使用相同的键;
CACHE_REDIS_SENTINELS:['127.0.0.1:6379', '127.0.0.2:6379', '127.0.0.3:6379'] #Redis哨兵地址的列表或元组;
CACHE_REDIS_SENTINEL_MASTER:'cluster-master' #哨兵配置中的主服务器的名称
CACHE_REDIS_PASSWORD:'password' #服务器的 Redis 密码;
CACHE_REDIS_DB:0 #Redis db(从零开始的数字索引),默认为 0
RedisClusterCache:使用Redis自动分区缓存,其配置参数可以有:
CACHE_KEY_PREFIX:'' #所有它都可以用于应用程序的应用程序使用相同的键;
CACHE_REDIS_CLUSTER:'127.0.0.1:6379,127.0.0.2:6379,127.0.0.2:6379' #一串以逗号分隔的 Redis 集群节点地址;
CACHE_REDIS_PASSWORD:'password'#服务器的 Redis 密码。
还有其他的类型,如果使用到再罗列出来,下面就介绍下使用方法,我目前使用的文件系统的方式,在工厂数中使用init_app延迟初始化
from flask_caching import Cache
cache = Cache()
#以下配置我都写在setting.py里面
CACHE_DEFAULT_TIMEOUT = 21600
CACHE_TYPE = "filesystem"
CACHE_DIR = r"./cache"
#然后在工厂函数中
app.config.from_pyfile("../settings.py")
cache.init_app(app)
然后就可以使用了,可以在函数上添加装饰器来缓存,但是函数分为有参数和无参数,视图函数也可以装饰
无参数函数使用如下装饰器
@cache.cached(timeout=None,key_prefix=None,unless=None,forced_update=None,query_string=False)
timeout为超时时间;
可选参数有:
key_prefix:缓存指定的函数;
unless:是否启用缓存,如果为True,不启用缓存;
forced_update:缓存是否实时更新,如果为True,无论是否过期都将更新缓存;
query_string:为True时,缓存键是先将参数排序然后哈希的结果。
有参数函数可以使用如下方法
@cache.memoize(timeout=None,make_name=None,unless=None,forced_update=None,query_string=False)
与cache.cached()方法类似,区别为cache.memoize有make_name,其作用是设置函数的标志,如果没有就使用装饰的函数。
另外我们还可以单独设置缓存,使用cache中的set方法,设置多个可以使用set_many
cache.set(key,value,timeout=None) #设置一个缓存对象
cache.set_many([(key,value),(key,value),...,(key,value)],timeout=None) #设置多个缓存对象
获取使用get方法
cache.get(key) #获取一个缓存对象
cache.get_many(key1,key2,....) #获取多个缓存对象
删除可以使用如下方法
cache.get.delete(key) #删除一个缓存对象
cache_delete_many(key1,key2,...) #删除多个缓存对象
cache.clear() #删除所有缓存对象
内容版权声明:除非注明,否则皆为本站原创文章。