当前位置: 首页 > 工具软件 > flask-caching > 使用案例 >

flask-caching缓存

焦苏燕
2023-12-01

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)  #删除键
    
 类似资料: