flask-caching缓存
Flask-Caching
什么是缓存?为什么使用缓存?
数据库是 web 应⽤性能的瓶颈,为了提⾼ web 应用访问效率,尽可能减少数据库的操作,可以将经常访问的数据缓存起来,再次使⽤用时直接从缓存中获取,而不是每次都操作数据库。
flask-cacheing
- flask 数据缓存扩展
- flask-cache 已经不在维护,因此使用 flask-caching
安装
pip install flask-caching pip install redis
初始化
from flask_caching import Cache cache = Cache() cache.init_app(app=app, config={'CACHE_TYPE': 'simple'})
配置
CACHE_TYPE:设置缓存的类型设置都是在config中设置的 # 下面五个参数是所有的类型共有的 CACHE_NO_NULL_WARNING = "warning" # null类型时的警告消息 CACHE_ARGS = [] # 在缓存类实例化过程中解包和传递的可选列表,用来配置相关后端的额外的参数 CACHE_OPTIONS = {} # 可选字典,在缓存类实例化期间传递,也是用来配置相关后端的额外的键值对参数 CACHE_DEFAULT_TIMEOUT # 默认过期/超时时间,单位为秒 CACHE_THRESHOLD # 缓存的最大条目数CACHE_TYPE = null # 默认的缓存类型,无缓存 CACHE_TYPE = 'simple' # 使用本地python字典进行存储,非线程安全CACHE_TYPE = 'filesystem' # 使用文件系统来存储缓存的值 CACHE_DIR = "" # 文件目录CACHE_TYPE = 'memcached' # 使用memcached服务器缓存 CACHE_KEY_PREFIX # 设置cache_key的前缀 CAHCE_MEMCACHED_SERVERS # 服务器地址的列表或元组 CACHE_MEMCACHED_USERNAME # 用户名 CACHE_MEMCACHED_PASSWORD # 密码CACHE_TYPE = 'redis' # 使用redis作为缓存 CACHE_KEY_PREFIX # 设置cache_key的前缀 CACHE_REDIS_HOST # redis地址 CACHE_REDIS_PORT # redis端口 CACHE_REDIS_PASSWORD # redis密码 CACHE_REDIS_DB # 使用哪个数据库 # 也可以一键配置 CACHE_REDIS_URL 连接到Redis服务器的URL。示例 redis://user:password@localhost:6379/2
缓存视图函数
@app.route('/') @cache.cached(timeout=30) # timeout 设置超时时间 def index():print('查询数据库')return '缓存视图函数'@app.route('/clear/') def index():cache.clear()return '清除所有的缓存,操作需慎重,不推荐使用'
缓存普通函数(无参)
# 缓存普通函数时,推荐指定 key_prefix,缓存 key 的前缀 # 否则 key 即为调⽤的视图函数所在的路由 # 单独缓存某个函数,提供更好的复用性 @cache.cached(timeout=50, key_prefix='get_list') def get_list():return [random.randint(0, 10) for i in range(10)]@app.route('/random/') def random():return get_list()
缓存普通函数(有参)
@cache.memoize(timeout=50, make_name='param_func') def param_func(a, b):return a+b+random.randint(1, 50)@app.route('/cache/') def cache():param_func(1, 2)return 'cache'@app.route('/delete/') def delete():cache.delete_memoized(param_func, 1, 2)return 'delete'
缓存对象(键值对)
@app.route('/test') def test():cache.set('name','小明', timeout=30)cache.set('person', {'name':'小明', 'age':18})x = cache.get('name')print(x)cache.set_many([('name1','小明'),('name2','老王')])print(cache.get_many("name1","name2"))print(cache.delete("name"))print(cache.delete_many("name1","name2"))return 'test'
cache 对象的主要方法
cache.cached:装饰器,装饰无参数函数,使得该函数结果可以缓存参数:timeout:超时时间key_prefix:设置该函数的标志unless:设置是否启用缓存,如果为True,不启用缓存forced_update:设置缓存是否实时更新,如果为True,无论是否过期都将更新缓存query_string:为True时,缓存键是先将参数排序然后哈希的结果cache.memoize:装饰器,装饰有参数函数,使得该函数结果可以缓存make_name:设置函数的标志,如果没有就使用装饰的函数# 其他参数同cachedcache.delete_memoized:删除缓存参数:func_name:缓存函数的引用*args:函数参数cache.clear() # 清除缓存所有的缓存,这个操作需要慎重 cache.get(key) #获取一个键的值,如果值是json格式会自动转化成字典set(key,value,timeout) #设置一个键值,value可以是字典,会自动转化json格式的字符串add(key, value, timeout=None) #设置一个键值,如果存在就pass,注意和set的区别delete(key) #删除键
flask-caching缓存相关推荐
- Spring Caching缓存
Spring Caching缓存 简单的demo 约束应用中可用的缓存 关闭缓存 几个重要的注解 @Cacheable @CachePut @CacheEvict @Caching CacheMana ...
- flask html缓存,flask_cache如何缓存动态数据,如何调用缓存数据
伪代码如何: from flask import Flask, render_template from flask_cache import Cache import os basedirs = o ...
- Java Caching(缓存)-策略和JCache API
This Article Is From:https://dzone.com/refcardz/java-caching Written byAbhishek GuptaSenior Product ...
- 全面认识一下.NET 4.0的缓存功能
很多关于.NET 4.0新特性的介绍,缓存功能的增强肯定是不会被忽略的一个重要亮点.在很多文档中都会介绍到在.NET 4.0中,缓存功能的增强主要是在扩展性方面做了改进,改变了原来只能利用内存进行缓存 ...
- 什么是“缓存友好”代码?
本文翻译自:What is a "cache-friendly" code? What is the difference between " cache unfrien ...
- 掌握了Docker Layer Caching才敢自称精通Dockerfile
长话短说:本次原创将向您展示在Docker中使用Layer Cache以加快镜像构建. " 这个话题的初衷在于:应用打包过程是很慢的(下载并安装框架&第三方依赖包.生成assets) ...
- 系统缓存全解析 [转]
有时候总听到网友说网站运行好慢,不知如何是好:有时候也总见到一些朋友写的网站功能看起来非常好,但访问性能却极其的差.没有"勤俭节约"的意识,势必会造成"铺张浪费" ...
- 【Python】【Flask】Flask 后台发送html页面多种方法
1.使用模板: @app.route('/') def home():return render_template("homepage.html")#homepage.html在t ...
- python3 Flask 多人答题(完整项目带源码与使用)
TopQB答题系统 2020/01/05 @pingfan 功能: 1.多人同时答题系统 2.在线查看个人得分与答题情况(解析) 3.载入题库,随机抽取题目支持[单选题,多选题 ...
最新文章
- FPGA从Xilinx的7系列学起(7)
- 记一次validator jar冲突导致的启动异常
- 5 项大奖,70 项满分!阿里云全方位引领云原生技术升级
- rabbitmq代码
- linux-centos7 常用的基本命令--文件内容查看、硬链接和软链接
- JProfiler 简要使用说明
- mysql数据库是以表为单位存储的,创建一个以数据库名称为参数的MySQL存储过程,以列出具有特定数据库中详细信息的表。...
- PHP多重身份认证,浅谈php用户身份认证
- 发烧游戏机型的计算机制配单,万元主机配置发烧级游戏设计渲染配置单
- 27岁学前端开发,3年前端开发工资待遇
- 数据分析学习记录(四)--在origin中实现单因素方差分析和非参数检验
- 解决 Performing stop of activity that is not resumed 报错!!
- Java(13)- 抽象类
- 第十章 sed. 其他各章可察看相应的 link.
- 有关声音信号的那么点知识
- SEW变频器调试步骤(MoviFit,MoviPro,MoviDrive)电气工程师必备(经10年电气工程师总结内部培训资料)
- MATLAB绘图常见问题1(多子图情况下如何设置一个右侧的colorbar)
- WebRTC 传输安全机制:深入显出 SRTP 协议
- UNECE发布疫情后减少城市汽车使用指南
- 外卖订单爬虫 定时自动抓取三大外卖平台上商家订单(美团,饿了么,百度外卖)