|
@@ -0,0 +1,124 @@
|
|
|
|
|
+# Story 010.002: system-config-redis-cache
|
|
|
|
|
+
|
|
|
|
|
+## Status
|
|
|
|
|
+Draft
|
|
|
|
|
+
|
|
|
|
|
+## 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
|
|
|
|
|
+- [ ] 扩展系统配置服务添加Redis缓存方法 (AC: 1, 2)
|
|
|
|
|
+ - [ ] 在SystemConfigServiceMt中添加RedisUtil依赖
|
|
|
|
|
+ - [ ] 实现带缓存的getConfigByKey方法
|
|
|
|
|
+ - [ ] 实现带缓存的getConfigsByKeys方法
|
|
|
|
|
+ - [ ] 实现缓存清除方法
|
|
|
|
|
+- [ ] 实现缓存策略和TTL配置 (AC: 3)
|
|
|
|
|
+ - [ ] 配置默认TTL为1小时
|
|
|
|
|
+ - [ ] 实现可配置的TTL参数
|
|
|
|
|
+ - [ ] 添加缓存键格式化工具方法
|
|
|
|
|
+- [ ] 实现缓存失效机制 (AC: 4)
|
|
|
|
|
+ - [ ] 在setConfig方法中添加缓存清除逻辑
|
|
|
|
|
+ - [ ] 在deleteConfig方法中添加缓存清除逻辑
|
|
|
|
|
+ - [ ] 在update方法中添加缓存清除逻辑
|
|
|
|
|
+- [ ] 实现缓存穿透保护 (AC: 5)
|
|
|
|
|
+ - [ ] 添加空值缓存机制
|
|
|
|
|
+ - [ ] 实现短TTL的空值缓存
|
|
|
|
|
+ - [ ] 添加缓存预热机制
|
|
|
|
|
+- [ ] 创建Redis缓存集成测试 (AC: 6)
|
|
|
|
|
+ - [ ] 创建缓存功能集成测试
|
|
|
|
|
+ - [ ] 测试缓存命中场景
|
|
|
|
|
+ - [ ] 测试缓存失效场景
|
|
|
|
|
+ - [ ] 测试缓存穿透保护
|
|
|
|
|
+- [ ] 验证现有功能无回归 (AC: 6)
|
|
|
|
|
+ - [ ] 运行现有系统配置测试
|
|
|
|
|
+ - [ ] 验证共享CRUD包集成正常
|
|
|
|
|
+
|
|
|
|
|
+## 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<SystemConfigMt>
|
|
|
|
|
+- **租户配置**: 通过tenantOptions配置租户隔离
|
|
|
|
|
+- **用户跟踪**: 通过userTracking配置用户跟踪
|
|
|
|
|
+- **自定义方法**: getConfigByKey, getConfigsByKeys, setConfig, deleteConfig等
|
|
|
|
|
+
|
|
|
|
|
+### 缓存策略设计
|
|
|
|
|
+- **缓存键格式**: `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) |
|
|
|
|
|
+
|
|
|
|
|
+## Dev Agent Record
|
|
|
|
|
+
|
|
|
|
|
+### Agent Model Used
|
|
|
|
|
+
|
|
|
|
|
+### Debug Log References
|
|
|
|
|
+
|
|
|
|
|
+### Completion Notes List
|
|
|
|
|
+
|
|
|
|
|
+### File List
|
|
|
|
|
+
|
|
|
|
|
+## QA Results
|