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 服务器端口,默认为 6379CACHE_REDIS_PASSWORD:"password" #服务器的 Redis 密码;
CACHE_REDIS_DB :0 #Redis db(从零开始的数字索引),默认为 0CACHE_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()     #删除所有缓存对象

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.sulao.cn/post/1007

相关推荐