FLASK 缓存(flask_caching)

1、目标

为了尽量减少缓存穿透,并同时减少web的响应时间,可以针对那些需要一定时间才能获取结果的函数和那些不需要频繁更新的视图函数提供缓存服务,可以在一定的时间内直接返回结果而不是每次都需要计算或者从数据库中查找。

2、 集成

bash 复制代码
pip install Flask-Caching==2.3.0
pip install cachelib==0.9.0

3、使用

3.1、配置

  • null: 不缓存。
  • simple: 使用本地Python字典缓存。这不是真正的线程安全。
  • memcached: 使用memcached服务器作为后端。支持pylibmc或memcache或谷歌应用程序引擎的memcache库。
  • gaememcached: MemcachedCache一个不同的名称。
  • redis: 使用 Redis 作为后端存储缓存值。
  • filesystem: 使用文件系统来存储缓存值。
  • saslmemcached:使用memcached服务器作为后端。使用SASL建立与memcached服务器的连接。pylibmc是必须的,libmemcached必须支持SASL。
bash 复制代码
class BaseConfig:
    # 缓存配置
    CACHE_TYPE = os.getenv('CACHE_TYPE') or 'SimpleCache'
    CACHE_DEFAULT_TIMEOUT = os.getenv('CACHE_DEFAULT_TIMEOUT') or 300

初始化及注册蓝图

bash 复制代码
from flask import Flask
from flask_caching import Cache
# 包名需要修改
from applications.configs.config import BaseConfig
cache = Cache(config={'CACHE_TYPE': BaseConfig.CACHE_TYPE, 'CACHE_DEFAULT_TIMEOUT': BaseConfig.CACHE_DEFAULT_TIMEOUT})

#缓存配置
'''
参数:
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 # 获取缓存对象

#获取某个网页是否存在缓存,key值如'view//gbook.html'
cache.cache.has('view/{}'.format(request.path))
#打印该缓存
print(request.path,cache.get('view/{}'.format(request.path)))
#删除该缓存
cache.delete('view//gbook.html')
'''

# 注册
def init_cache(app: Flask):
    cache.init_app(app)

3.2、使用

可选参数有:

  • key_prefix:缓存指定的函数;
  • unless:是否启用缓存,如果为True,不启用缓存;
  • forced_update:缓存是否实时更新,如果为True,无论是否过期都将更新缓存;
  • query_string:为True时,缓存键是先将参数排序然后哈希的结果;
  • timeout: 超时会自动刷新缓存。

在视图函数中

bash 复制代码
@app.route('/index')                                                                                                         
@cache.cached(timeout=50)
def index():  
    print "index called"
    return "Hello World"

在其他重复调用的函数

bash 复制代码
@cache.cached(timeout=300, key_prefix="event", make_cache_key='event_info_cache')
def get_event_dict():
	pass

注意:key_prefix 一定要加,否则在一个视图函数中,调取俩个使用了缓存的函数,会返回相同的结果。

相关推荐
xiaogg36789 小时前
redis-cluster集群配置部署
数据库·redis·缓存
PineappleCode11 小时前
三种防重方案对比:标志位、防抖节流、缓存的适用场景
缓存
Rocket MAN11 小时前
Spring Boot 缓存:工具选型、两级缓存策略、注解实现与进阶优化
spring boot·后端·缓存
weixin_466814 小时前
Redis数据库基础
数据库·redis·缓存
麦麦大数据16 小时前
F037 vue+neo4j 编程语言知识图谱可视化分析系统vue+flask+neo4j
vue.js·flask·知识图谱·neo4j·可视化·编程语言知识图谱
Lucky小小吴17 小时前
开源项目解读4-高性能并发缓存库Ristretto
缓存·开源·高并发·高性能缓存·实时数据处理·ristretto·tinylfu
亮子AI20 小时前
【NestJS】在 nest.js 项目中,如何使用 Postgresql 来做缓存?
开发语言·缓存·node.js·nest.js
好大的月亮21 小时前
oss中的文件替换后chrome依旧下载到缓存文件概述
前端·chrome·缓存
CodeAmaz1 天前
SpringBoot两级缓存实现
spring boot·spring·缓存
合作小小程序员小小店1 天前
web开发,在线%高校舆情分析%系统demo,基于python,flaskweb,echart,nlp,ida,tf-idf,多爬虫源,数据库mysql
人工智能·python·flask·html5·tf-idf