跳转至

AD-018:Redis 启用方向——列表读缓存(TD-05 闭环)

  • 日期:2026-08-13
  • 背景:TD-05 记录 Redis 端口已预留(AD-017 已解决端口冲突)但代码无任何使用,属「预留未用」工程债。台账 §5.3 给出两个候选方向:① 分析任务队列(替换内存 @Async)② 读缓存(file_node/列表页),均要求「出 AD-018」。
  • 决策
  • 选读缓存,不选任务队列:列表读缓存直接对应验收「列表接口 P95 <500ms」,且只动读路径、风险低;任务队列需替换 AnalysisRunner 的内存 @Async 状态机(AD-5),并发语义复杂,留待 A2 有真实并发压测数据后再评估(届时再出 AD-019)。
  • 首个落地点 = 项目列表 GET /projects(Dashboard/项目列表页高频读),Spring Cache + Redis,TTL 60s。
  • 一致性策略:项目增/删/改走 @CacheEvict 精确失效;分析完成引起的 healthScore/lastAnalyzedAt 变化由 60s TTL 兜底(Dashboard 场景 1 分钟延迟可接受,记为边界)。
  • 序列化GenericJackson2JsonRedisSerializer(JSON 可读可调试,避免 JDK 序列化的脆弱性与跨版本不兼容)。
  • 降级:Redis 不可达时 CacheErrorHandler 忽略缓存异常 → 接口直接查库返回(200),不因缓存故障 500(延续 TD-08 降级对称原则)。
  • 影响:backend 新增 spring-boot-starter-data-redis 依赖;application.yml 增加 spring.data.redis127.0.0.1:6380,对齐 AD-017)。无 Redis 时列表功能不受影响(降级直查库)。
  • 验证:真库(postgres + redis)下同一列表参数两次请求,第二次命中缓存;停掉 redis 后列表接口仍 200(降级生效)。