You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:59:08