Files
Wo254992andhuangxd- 7f44d1a67f fix(cache): 隔离缓存后端并优先恢复 Local Redis 查询数据 (#492)
* fix(cache): 隔离缓存后端并优先恢复 Local Redis 查询数据

* fix(cache): 透传剧集 ID 写入失败并补充清理失败提示

- addAnime 的 ID 溢出/映射错误保留在请求级 detailStore,逐层合并后写入搜索响应 errorMessage,不再只留服务端日志
- 清缓存保存失败时提示未保存的后端仍保留清理前数据、重启后会重新加载
- 补充搜索透传与清理失败提示的回归用例

* fix(cache): 收敛剧集 ID 写入失败的提示范围并隔离诊断日志

- 诊断用的 animes 序列化移出主 try 并自带容错:历史快照里残留
  links 为 null 的条目时,序列化不再把已成功的写入判成失败,也不再把
  内部报错透给调用方。
- errorMessage 只在"没有结果"时承载写入失败原因,恢复与 dandanplay
  既有约定一致(其余响应点均与 success:false 配对);链接解析与合并
  分支恒有合成条目,不承载该提示。
- /api/v2/match 与 /api/v2/search/episodes 在无结果时透出同一原因,
  补齐上一提交只覆盖搜索接口的缺口。
- 逐源隔离存储的错误合并抽为 mergeAddAnimeError,去掉重复实现。
- 测试:溢出用例拆成"无结果"与"部分成功"两个方向,新增 links 为 null
  的历史快照不再拖垮后续写入用例。

* fix(cache): 限制本地 Redis 命令响应等待时间

- 初始化读取使用 5 秒响应期限,普通 GET/SET/SETEX 使用 30 秒期限
- 超时关闭对应连接并冷却 30 秒,释放在途请求;失败不更新保存 hash
- 复用现有 TCP 故障测试,覆盖读取回退、并发等待、写入失败及冷却后重连
- 影响范围仅限 Local Redis 工具与测试,不新增配置或依赖
- 验证:159 项测试通过,原始故障脚本复测通过,语法检查及 Node/neutral 打包通过

* fix(cache): 收敛编号恢复并限制缓存清理等待

- 编号兜底统一在初始化结束时判断,健康计数器或 ID 不受损坏副本影响
- 剧集链接分配失败时回滚本次追加的 ID 和计数器,保留既有详情与映射
- 各后端并发清理,Redis 清理使用包含 Local Redis 建连时间的 5 秒预算
- 保留持久化失败状态与失败后端提示,普通业务沿用原超时设置
- 复用持久化和 TCP 故障用例补充回归,说明编号兜底及备份语义

* fix(cache): 修复 Upstash 收藏热切换与读取失败假成功

* fix(cache): 补齐剧集编号引用并按详情批次校正上界

* perf(cache): 复用 Local Redis 批量保存的序列化结果

* fix(cache): 阻止热切换前的收藏请求修改新库

* test(cache): 将缓存回归测试合并到主测试文件

* test(cache): 扩大 Redis 超时测试的预算压缩范围,5 个场景耗时从 ~27s 降至 ~8s

- 业务命令 30s、握手 5s、批量/清理 5s 与 Upstash 5s 一并钳制到 1200ms,并新增 AbortSignal.timeout 钳制
- clear-write 假服务器慢握手停顿 3000ms 降至 600ms,保持仍慢于压缩后的命令预算
- 断言下限 4500ms 调整为 1000ms,上界收紧至 4000ms
- 新增断言验证清理路径剩余预算扣除已耗连接时间(budgets 记录原始值)

---------

Co-authored-by: huangxd- <649924757@qq.com>
2026-10-02 23:11:33 +08:00
..