必须启用Redis作为Dify外部缓存后端以实现毫秒级响应、支撑高并发并避免数据库瓶颈;需验证Redis服务连通性,配置.env中REDIS_HOST、REDIS_PORT、CACHE_BACKEND=redis等参数,设置REDIS_DEFAULT_TTL及maxmemory策略,并通过redis-cli monitor或X-Cache响应头验证缓存命中。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Dify中用Redis加速高频API接口(比如工作流列表、模型配置获取、会话上下文读取)的查询响应,必须让Dify跳过默认的内存缓存,转而连接外部Redis实例并启用读写路径。这一步不做对,所有接口仍走本地字典缓存,完全无法分担数据库压力。
修改.env启用Redis缓存后端
打开项目根目录下的 .env 文件,在其中添加或修改以下四行配置:
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
CACHE_BACKEND=redis
ENABLE_CACHE=true
【CACHE_BACKEND=redis是唯一开关项】——缺省值为 memory,不显式设为 redis,其余配置全无效;ENABLE_CACHE=true 必须同时开启,否则整个缓存中间件被跳过。
若Redis设置了密码,追加 REDIS_PASSWORD=yourpassword;若未设密码,必须删掉 REDIS_PASSWORD 这一行或留空,否则连接认证失败,Dify启动时会卡在缓存初始化阶段且无明确报错。
配置连接池与超时参数(可选但强烈建议)
编辑 api/extensions/ext_redis.py 文件,定位到 ConnectionPool 初始化位置:
将 max_connections 从默认值(通常为10)调高至 20~50,具体取决于并发请求数量;
设置 socket_timeout=3 和 socket_connect_timeout=3,避免慢节点拖垮整个请求链路;
确认 encoding='utf-8' 且 decode_responses=False,后者保证二进制数据(如序列化后的LLM响应)不被错误解码损坏。
验证缓存是否真正生效
方法一:实时监听缓存操作
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
新开终端窗口,执行:
redis-cli monitor | grep -E "(SET|GET) \"cache:"
然后在浏览器中反复刷新工作流列表页(GET /api/v1/workflows);
看到类似 "SET" "cache:workflow:list:user_abc" "{}" "EX" "300" 的输出,说明缓存已写入且设置了5分钟过期。
方法二:检查响应头命中标识
用 curl 或 Postman 调用同一接口两次:
curl -I http://localhost:5001/api/v1/workflows
第二次响应中出现 X-Cache: HIT 字段,即表示命中;若为 MISS 或该字段缺失,则缓存未生效。
设置全局缓存TTL与内存淘汰策略
第一步:在 .env 中添加默认过期时间
REDIS_DEFAULT_TTL=300
第二步:登录 Redis CLI 执行内存管控命令:
CONFIG SET maxmemory 2gb
CONFIG SET maxmemory-policy allkeys-lru
这一步强制Redis在内存达2GB时自动淘汰最少使用的键;若不设策略,Dify持续写入缓存会导致Redis触发 OOM command not allowed when used memory > 'maxmemory' 错误,整个缓存层瘫痪。

















