zoukankan      html  css  js  c++  java
  • 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:设置函数的标志,如果没有就使用装饰的函数
      		# 其他参数同cached
      
      cache.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)  #删除键
      
  • 相关阅读:
    Java学习:冒泡排序和选择排序
    Java学习:多态
    Java学习:抽象类与接口
    Java学习:继承
    Java学习:标准类
    Java学习:方法简介
    传参的本质
    new 关键字做的事
    一个引用类型的对象占多大堆空间
    栈中空间大小
  • 原文地址:https://www.cnblogs.com/-min/p/12833237.html
Copyright © 2011-2022 走看看