如何在Flask Redis缓存中设置连接超时参数?
如何为Flask-Caching的Redis缓存设置连接超时?
我来帮你解决这个问题!其实Flask-Caching的Redis后端基于redis-py库实现,所以你可以直接传递redis-py支持的连接超时参数,有两种简单的方式来配置:
方法1:通过Redis URL传递超时参数
你可以在CACHE_REDIS_URL中添加查询参数,直接指定连接和读写超时:
from flask import Flask, render_template from flask_caching import Cache app = Flask(__name__, static_url_path='/static') config = { "DEBUG": True, "CACHE_TYPE": "redis", "CACHE_DEFAULT_TIMEOUT": 300, "CACHE_KEY_PREFIX": "inventory", # 在URL中添加socket_timeout和socket_connect_timeout参数 "CACHE_REDIS_URL": 'redis://localhost:6379?socket_timeout=5&socket_connect_timeout=5' } cache = Cache(app, config=config) @app.route('/') @cache.memoize() def dev(): # some code return render_template("index.html", data=json_data, columns=columns)
这里的两个参数作用:
socket_connect_timeout=5:限制建立Redis连接的超时时间(单位:秒)socket_timeout=5:限制Redis读写操作的超时时间(单位:秒)
方法2:使用CACHE_REDIS_OPTIONS配置字典
如果不想把参数写在URL里,也可以通过CACHE_REDIS_OPTIONS传递所有redis-py支持的连接参数:
from flask import Flask, render_template from flask_caching import Cache app = Flask(__name__, static_url_path='/static') config = { "DEBUG": True, "CACHE_TYPE": "redis", "CACHE_DEFAULT_TIMEOUT": 300, "CACHE_KEY_PREFIX": "inventory", "CACHE_REDIS_HOST": "localhost", "CACHE_REDIS_PORT": 6379, # 注意这里建议用整数类型,而非字符串 # 添加Redis连接选项字典 "CACHE_REDIS_OPTIONS": { "socket_timeout": 5, "socket_connect_timeout": 5, # 可选:开启socket保活,避免长时间闲置断开 "socket_keepalive": True } } cache = Cache(app, config=config) @app.route('/') @cache.memoize() def dev(): # some code return render_template("index.html", data=json_data, columns=columns)
额外建议:捕获连接异常
设置超时后,当Redis连接失败时会快速抛出redis.exceptions.ConnectionError,你可以在视图函数中捕获这个异常,实现降级逻辑(比如跳过缓存直接返回数据):
from redis.exceptions import ConnectionError @app.route('/') @cache.memoize() def dev(): try: # some code return render_template("index.html", data=json_data, columns=columns) except ConnectionError: # 缓存连接失败时,清空当前缓存装饰器的缓存记录 cache.delete_memoized(dev) # 直接返回数据,跳过缓存逻辑 return render_template("index.html", data=json_data, columns=columns)
这样就能避免程序长时间等待,快速处理Redis连接失败的情况啦!
内容的提问来源于stack exchange,提问作者Amjad Hussain Syed
相关产品推荐
相关产品推荐

