010.002.system-config-redis-cache.story.md 11 KB

Story 010.002: system-config-redis-cache

Status

Completed

Story

As a 系统管理员, I want 为系统配置模块添加Redis缓存支持,优化配置访问性能, so that 可以显著减少数据库访问次数,提高系统配置读取效率

Acceptance Criteria

  1. 在系统配置服务中添加Redis缓存功能
  2. 实现缓存键格式:system_config:{tenantId}:{configKey}
  3. 设置默认TTL为1小时
  4. 配置更新时自动清除相关缓存
  5. 实现缓存穿透保护机制
  6. 验证现有功能保持完整,无回归

Tasks / Subtasks

Dev Notes

技术栈信息 [Source: architecture/tech-stack.md]

  • 运行时: Node.js 20.18.3
  • 框架: Hono 4.8.5 (Web框架和API路由)
  • 数据库: PostgreSQL 17 (通过TypeORM)
  • ORM: TypeORM 0.3.25 (实体管理)
  • 缓存: Redis 7.0.0 (会话管理和缓存)

项目结构信息 [Source: architecture/source-tree.md]

  • 包位置: packages/core-module-mt/system-config-module-mt/
  • Redis工具位置: packages/shared-utils/src/utils/redis.util.ts
  • 现有模块参考: packages/core-module-mt/file-module-mt/

Redis工具集成模式 [Source: packages/shared-utils/src/utils/redis.util.ts]

  • 单例模式: 使用RedisUtil.getInstance()获取实例
  • 连接管理: 自动连接和断开连接
  • 键值操作: set/get/del方法支持TTL
  • 错误处理: 内置错误处理机制

系统配置服务现有结构 [Source: packages/core-module-mt/system-config-module-mt/src/services/system-config.service.mt.ts]

  • 继承模式: 继承GenericCrudService
  • 租户配置: 通过tenantOptions配置租户隔离
  • 用户跟踪: 通过userTracking配置用户跟踪
  • 自定义方法: getConfigByKey, getConfigsByKeys, setConfig, deleteConfig等
  • 参考文件: packages/core-module-mt/system-config-module-mt/src/services/system-config.service.mt.ts
  • 缓存策略设计

    • 缓存键格式: system_config:{tenantId}:{configKey} [参考: docs/epic-010-system-config-multi-tenant.md]
    • 默认TTL: 1小时 [参考: docs/epic-010-system-config-multi-tenant.md]
    • 空值缓存: 短TTL (如5分钟) 防止缓存穿透
    • 缓存预热: 系统启动时预加载常用配置

    集成方法

    • 依赖注入: 在SystemConfigServiceMt构造函数中注入RedisUtil
    • 缓存优先: 先查询缓存,缓存未命中再查询数据库
    • 写穿透: 数据更新时同步更新缓存
    • 缓存清除: 配置更新时清除相关缓存

    关键参考文件路径

    测试

    测试标准 [Source: architecture/testing-strategy.md]

    • 测试框架: Vitest + hono/testing
    • 测试位置: packages/core-module-mt/system-config-module-mt/tests/
    • 测试类型: 单元测试 + 集成测试
    • 覆盖率目标: 单元测试 ≥ 80%,集成测试 ≥ 60%

    测试文件结构

    • tests/integration/system-config-redis-cache.integration.test.ts - Redis缓存集成测试
    • 现有测试文件保持不变

    测试场景

    • 缓存命中测试
    • 缓存未命中测试
    • 缓存失效测试
    • 缓存穿透保护测试
    • 多租户缓存隔离测试

    现有模块参考模式

    • 认证模块: packages/core-module-mt/auth-module-mt/
    • 用户模块: packages/core-module-mt/user-module-mt/
    • 文件模块: packages/core-module-mt/file-module-mt/
    • 命名约定: 所有文件使用 .mt.ts 后缀,遵循多租户包命名规范

    Change Log

    Date Version Description Author
    2025-11-20 1.0 初始故事创建 Bob (Scrum Master)
    2025-11-20 1.1 为任务列表标注参考文件路径 Claude Code

    Dev Agent Record

    Agent Model Used

    • Agent: Claude Sonnet 4.5 (claude-sonnet-4-5-20250929)
    • Environment: Claude Code CLI in VSCode Extension
    • Session Date: 2025-11-20

    Debug Log References

    • 测试失败调试: 初始测试有3个失败,通过pnpm test -t "缓存命中测试"等命令调试
    • TypeORM语法修复: 发现{ configKey: missingKeys }语法错误,改为{ configKey: In(missingKeys) }
    • 批量缓存逻辑: 修复批量查询中的数据库查询和缓存更新逻辑
    • 缓存预热验证: 验证异步缓存预热操作的正确性

    Completion Notes List

    1. Redis工具类扩展: 成功扩展RedisUtil,添加系统配置缓存方法
    2. 系统配置服务集成: 成功集成Redis缓存到SystemConfigServiceMt
    3. 缓存策略实现: 实现默认1小时TTL、5分钟空值缓存TTL
    4. 缓存失效机制: 在setConfig、deleteConfig、update方法中正确清除缓存
    5. 缓存穿透保护: 实现空值缓存机制防止缓存穿透攻击
    6. 多租户缓存隔离: 按租户ID隔离缓存,确保数据安全
    7. 批量缓存操作: 实现高效的批量配置获取和缓存
    8. 缓存预热功能: 实现系统启动时预加载常用配置
    9. 集成测试覆盖: 创建8个完整的集成测试用例
    10. 回归测试验证: 所有现有功能保持完整,无回归

    File List

    修改的文件

    • packages/shared-utils/src/utils/redis.util.ts - 扩展Redis工具类
    • packages/core-module-mt/system-config-module-mt/src/services/system-config.service.mt.ts - 集成Redis缓存
    • docs/prd/epic-010-system-config-multi-tenant.md - 更新史诗文档
    • docs/stories/010.002.system-config-redis-cache.story.md - 更新故事文档

    新增的文件

    • packages/core-module-mt/system-config-module-mt/tests/integration/system-config-redis-cache.integration.test.ts - Redis缓存集成测试

    实施经验总结

    1. 技术挑战: TypeORM的In操作符使用需要特别注意,不能直接传递数组
    2. 缓存策略: 空值缓存TTL设置为5分钟,正常值TTL设置为1小时,平衡了性能和存储
    3. 批量操作: 批量缓存查询显著提高了性能,减少了Redis连接次数
    4. 测试覆盖: 集成测试确保了缓存逻辑的正确性和多租户隔离
    5. 错误处理: Redis连接错误自动处理,不影响主要业务逻辑

    QA Results

    • 测试结果: 8个Redis缓存集成测试全部通过
    • 回归测试: 16个系统配置模块测试全部通过
    • 性能验证: 缓存命中率显著提高,数据库访问次数减少
    • 功能验证: 所有验收标准满足,无功能回归