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缓存相关推荐

  1. Spring Caching缓存

    Spring Caching缓存 简单的demo 约束应用中可用的缓存 关闭缓存 几个重要的注解 @Cacheable @CachePut @CacheEvict @Caching CacheMana ...

  2. flask html缓存,flask_cache如何缓存动态数据,如何调用缓存数据

    伪代码如何: from flask import Flask, render_template from flask_cache import Cache import os basedirs = o ...

  3. Java Caching(缓存)-策略和JCache API

    This Article Is From:https://dzone.com/refcardz/java-caching Written byAbhishek GuptaSenior Product ...

  4. 全面认识一下.NET 4.0的缓存功能

    很多关于.NET 4.0新特性的介绍,缓存功能的增强肯定是不会被忽略的一个重要亮点.在很多文档中都会介绍到在.NET 4.0中,缓存功能的增强主要是在扩展性方面做了改进,改变了原来只能利用内存进行缓存 ...

  5. 什么是“缓存友好”代码?

    本文翻译自:What is a "cache-friendly" code? What is the difference between " cache unfrien ...

  6. 掌握了Docker Layer Caching才敢自称精通Dockerfile

    长话短说:本次原创将向您展示在Docker中使用Layer Cache以加快镜像构建. " 这个话题的初衷在于:应用打包过程是很慢的(下载并安装框架&第三方依赖包.生成assets) ...

  7. 系统缓存全解析 [转]

    有时候总听到网友说网站运行好慢,不知如何是好:有时候也总见到一些朋友写的网站功能看起来非常好,但访问性能却极其的差.没有"勤俭节约"的意识,势必会造成"铺张浪费" ...

  8. 【Python】【Flask】Flask 后台发送html页面多种方法

    1.使用模板: @app.route('/') def home():return render_template("homepage.html")#homepage.html在t ...

  9. python3 Flask 多人答题(完整项目带源码与使用)

    TopQB答题系统 2020/01/05 @pingfan 功能:     1.多人同时答题系统     2.在线查看个人得分与答题情况(解析)     3.载入题库,随机抽取题目支持[单选题,多选题 ...

最新文章

  1. FPGA从Xilinx的7系列学起(7)
  2. 记一次validator jar冲突导致的启动异常
  3. 5 项大奖,70 项满分!阿里云全方位引领云原生技术升级
  4. rabbitmq代码
  5. linux-centos7 常用的基本命令--文件内容查看、硬链接和软链接
  6. JProfiler 简要使用说明
  7. mysql数据库是以表为单位存储的,创建一个以数据库名称为参数的MySQL存储过程,以列出具有特定数据库中详细信息的表。...
  8. PHP多重身份认证,浅谈php用户身份认证
  9. 发烧游戏机型的计算机制配单,万元主机配置发烧级游戏设计渲染配置单
  10. 27岁学前端开发,3年前端开发工资待遇
  11. 数据分析学习记录(四)--在origin中实现单因素方差分析和非参数检验
  12. 解决 Performing stop of activity that is not resumed 报错!!
  13. Java(13)- 抽象类
  14. 第十章 sed. 其他各章可察看相应的 link.
  15. 有关声音信号的那么点知识
  16. SEW变频器调试步骤(MoviFit,MoviPro,MoviDrive)电气工程师必备(经10年电气工程师总结内部培训资料)
  17. MATLAB绘图常见问题1(多子图情况下如何设置一个右侧的colorbar)
  18. WebRTC 传输安全机制:深入显出 SRTP 协议
  19. UNECE发布疫情后减少城市汽车使用指南
  20. 外卖订单爬虫 定时自动抓取三大外卖平台上商家订单(美团,饿了么,百度外卖)

热门文章

  1. 网页禁止进行复制粘贴操作怎么破解?
  2. css3d动画案例,10个强大的纯CSS3动画案例分享
  3. ICPC2017香港赛区游记
  4. As-Exploits v1.3更新
  5. 塞氏盘法测水体透明度
  6. GNU开发工具——GDB快速入门
  7. C/C++编程日记:制作一个简单的内存外挂
  8. 关于 客户 感知思考
  9. Mac 批量重命名(增加前缀后缀)
  10. Vue的基础知识之插值操作