设计思路
设计要点
数据模型
字典服务采用两级数据模型:
- 字典类型:定义字典的分类和类型,如用户状态、订单状态等
- 字典项:定义具体的字典值和标签,如"正常"、"禁用"等
缓存机制
采用本地缓存 + Redis 分布式通知实现配置热更新:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 管理后台 │────▶│ Redis │◀────│ 服务实例 A │
│ (修改字典) │ │ (通知通道) │ │ (本地缓存) │
└─────────────┘ └─────────────┘ └─────────────┘
│
│ 定时检查
▼
┌─────────────┐
│ 服务实例 B │
│ (本地缓存) │
└─────────────┘- 本地缓存:减少数据库查询,提高性能
- Redis 通知:字典变更时通知所有实例刷新
- 定时检查:定时检查字典变更
字典命名规范
字典类型命名
推荐使用大写下划线格式:
USER_STATUS // 用户状态
ORDER_STATUS // 订单状态
PAYMENT_TYPE // 支付方式
GENDER // 性别字典值命名
- 数值型:使用数字字符串("1", "2", "3")
- 字符型:使用有意义的缩写("MALE", "FEMALE")
复制粘贴机制
支持字典数据的跨环境复制:
- 复制(Copy):导出字典类型和字典项数据
- 粘贴(Paste):导入字典数据,自动处理新增和更新
开发环境 ──Copy──▶ JSON 数据 ──Paste──▶ 测试环境数据流程
字典查询流程
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 业务代码 │───▶│ 字典缓存 │───▶│ 本地缓存 │
└──────────┘ └──────────┘ └──────────┘
│
│ 缓存未命中
▼
┌──────────┐
│ Database │
└──────────┘字典更新流程
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 管理后台 │───▶│ 更新数据库 │───▶│ 清除缓存 │───▶│ Redis │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
│
│ 通知
▼
┌──────────┐
│ 其他实例 │
│ 刷新缓存 │
└──────────┘