Skip to content

设计思路

设计要点

数据模型

字典服务采用两级数据模型:

  • 字典类型:定义字典的分类和类型,如用户状态、订单状态等
  • 字典项:定义具体的字典值和标签,如"正常"、"禁用"等

缓存机制

采用本地缓存 + Redis 分布式通知实现配置热更新:

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│  管理后台    │────▶│    Redis    │◀────│  服务实例 A  │
│ (修改字典)   │     │  (通知通道)  │     │  (本地缓存)  │
└─────────────┘     └─────────────┘     └─────────────┘

                                                │ 定时检查

                                        ┌─────────────┐
                                        │  服务实例 B  │
                                        │  (本地缓存)  │
                                        └─────────────┘
  • 本地缓存:减少数据库查询,提高性能
  • Redis 通知:字典变更时通知所有实例刷新
  • 定时检查:定时检查字典变更

字典命名规范

字典类型命名

推荐使用大写下划线格式:

USER_STATUS       // 用户状态
ORDER_STATUS      // 订单状态
PAYMENT_TYPE      // 支付方式
GENDER            // 性别

字典值命名

  • 数值型:使用数字字符串("1", "2", "3")
  • 字符型:使用有意义的缩写("MALE", "FEMALE")

复制粘贴机制

支持字典数据的跨环境复制:

  1. 复制(Copy):导出字典类型和字典项数据
  2. 粘贴(Paste):导入字典数据,自动处理新增和更新
开发环境 ──Copy──▶ JSON 数据 ──Paste──▶ 测试环境

数据流程

字典查询流程

┌──────────┐    ┌──────────┐    ┌──────────┐
│  业务代码  │───▶│  字典缓存  │───▶│ 本地缓存  │
└──────────┘    └──────────┘    └──────────┘

                     │ 缓存未命中

               ┌──────────┐
               │ Database │
               └──────────┘

字典更新流程

┌──────────┐    ┌──────────┐    ┌──────────┐    ┌──────────┐
│  管理后台  │───▶│ 更新数据库 │───▶│ 清除缓存  │───▶│  Redis   │
└──────────┘    └──────────┘    └──────────┘    └──────────┘

                                                      │ 通知

                                               ┌──────────┐
                                               │ 其他实例  │
                                               │ 刷新缓存  │
                                               └──────────┘

Released under the MIT License.