zoukankan      html  css  js  c++  java
  • flask-caching

    • 作用:用于缓存

    • 官网

      https://pythonhosted.org/Flask-Cache/
      
    • 安装

      pip install Flask-Cache
      或
      pip install Flask-Caching
      
    • 配置(三种方式)

      第一种

      from flask import Flask
      from flask_caching import Cache
      
      app = Flask(__name__)
      # Check Configuring Flask-Caching section for more details
      cache = Cache(app, config={'CACHE_TYPE': 'simple'})
      

      第二种

      cache = Cache(config={'CACHE_TYPE': 'simple'})
      
      app = Flask(__name__)
      cache.init_app(app)
      

      第三种

      #: Method A: During instantiation of class
      cache = Cache(config={'CACHE_TYPE': 'simple'})
      #: Method B: During init_app call
      cache.init_app(app, config={'CACHE_TYPE': 'simple'})
      
    • 配置多个缓存实例

      如果有多个缓存需要使用不同的缓存后端,则可以备用多个字典;

      cache1 = Cache()
      cache2 = Cache()
      cache1.init_app(app, config={ 'CACHE_TYPE' : 'redis','CACHE_REDIS_HOST':'192.168.1.20',
                                   'CACHE_REDIS_PORT':'6390'})
      cache2.init_app(app, config={ 'CACHE_TYPE' : 'redis','CACHE_REDIS_HOST':'192.168.1.21',
                                   'CACHE_REDIS_PORT':'6390'})
      
    • 其他配置操作

      CACHE_TPYE
          null: 无缓存
          simple: 本地Python字典存储
          memcached: 使用MemcachedCache作为缓存
          gaememcached: 使用GAEMemcachedCache作为缓存
          redis: 使用RedisCache作为存储
          filesystem: 使用FileSystemCache作为缓存
          saslmemcached: 使用SASLMemcachedCache作为缓存
      
      
      RedisCache – redis配置
          CACHE_DEFAULT_TIMEOUT    超时时间
          CACHE_KEY_PREFIX         cache_key前缀(key-value)
          CACHE_REDIS_HOST         Redis服务器主机
          CACHE_REDIS_PORT         Redis服务器端口。默认值为6379
          CACHE_REDIS_PASSWORD     Redis服务器密码
          CACHE_REDIS_DB           Redis db(从零开始的数字索引)。默认值为0
          CACHE_REDIS_URL          连接到Redis服务器的URL(redis://user:password@host:port/db)
          CACHE_ARGS               缓存时传递的参数列表
          CACHE_OPTIONS            选项(传递参数的作用)
      
    • 视图中使用

      # 缓存视图函数
      @blue.route('/home/')
      @cache.cached(timeout=30)
      def home():
          pass
      
      cache.cached:装饰器,装饰无参数函数,使得该函数结果可以缓存
      参数:
      timeout:超时时间
      key_prefix:设置该函数的标志
      unless:设置是否启用缓存,如果为True,不启用缓存
      forced_update:设置缓存是否实时更新,如果为True,无论是否过期都将更新缓存
      query_string:为True时,缓存键是先将参数排序然后哈希的结果
      
      cache.memoize:装饰器,装饰有参数函数,使得该函数结果可以缓存
      make_name:设置函数的标志,如果没有就使用装饰的函数
      # 其他参数同cached
      
      cache.delete_memoized:删除缓存
      参数:
      fname:缓存函数的名字或引用
      *args:函数参数
      
      cache.clear() # 清除缓存所有的缓存,这个操作需要慎重
      cache.cache # 获取缓存对象
      
    • 模板中使用

      上面介绍的缓存功能都是在应用代码中使用,其实在Jinja2模板中,我们还可以使用{% cache %}语句来缓存模板代码块:

      {% cache 50, 'temp' %}
      <p>This is under cache</p>
      {% endcache %}
      

      这样{% cache %}{% endcache %}语句中所包括的内容就会被缓存起来。{% cache %}语句的第一个参数是timeout过期时间,默认为永不过期;第二个参数指定了缓存项的键值,如果不设,键值就是模板文件路径"+"缓存块的第一行。上例中,我们设了键值是temp,然后在代码中,我们可以这样获取缓存项实际的键值:

      from flask.ext.cache import make_template_fragment_key
      key = make_template_fragment_key('temp')  # 获取实际的键值
      cache.delete(key)  # 使用实际键值删除缓存
      

      打印出来看看,你会发现实际的键值其实是_template_fragment_cache_temp。如果你要删除该缓存项,记得要传入实际的键值,而不是模板上定义的temp

    • 其他使用

      cache.set('name', 'atom', timeout=60) # 设置缓存
      name = cache.get('name') # 取值
      cache.clear() # 清空缓存
      cache.delete(‘index’) # 删除缓存
      
    • 所有类型的缓存对象都继承自flask框架的BaseCache,它定义了一个使用缓存的标准接口,通过继承BaseCache实现这些接口就可以在flask中方便的集成各种缓存;而flask_caching插件为我们对redis、memcached等实现了接口,做好了适配工作,我们可以直接使用。

      from werkzeug.contrib.cache import BaseCache
      
      # 标准接口
      clear():清除缓存
      get(key):获取一个键的值,如果值是json格式会自动转化成字典
      set(key,value,timeout):设置一个键值,value可以是字典,会自动转化json格式的字符串
      set_many(key,value,timeout):设置多个键值对
      add(key, value, timeout=None):设置一个键值,如果存在就pass,注意和set的区别
      delete(key):删除键
      delete_many(k1,k2...):删除多个键值
      get_many(k1,k2...):获取多个键的值
      get_dict(k1,k2...):获取多个键的值,返回一个字典
      has(k):查询是否存在一个键
      inc(self, key, delta=1):将键的值加一
      dec(self, key, delta=1):将键的值减一
      
    • 自定义缓存后端

      #: the_app/custom.py
      class RedisCache(BaseCache):
          def __init__(self, servers, default_timeout=500):
              pass
          # 实现BaseCache的各个接口
      
      def redis(app, config, args, kwargs):
         args.append(app.config['REDIS_SERVERS'])
         return RedisCache(*args, **kwargs)
      
      # CACHE_TYPE 就是 the_app.custom.redis
      from the_app.custom import redis
      cache.init_app(app, config={ 'CACHE_TYPE' : 'redis',})
      
  • 相关阅读:
    【转】数学题目大集合
    hdu3534,个人认为很经典的树形dp
    GYM
    HDU
    POJ
    POJ
    POJ
    set的经典应用
    天梯赛训练1 7-9 集合相似度
    天梯赛训练1 7-8 查验身份证
  • 原文地址:https://www.cnblogs.com/liuweida/p/12298909.html
Copyright © 2011-2022 走看看