Redis 建模先写清楚“按什么键访问、需要什么原子操作、数据保留多久”,再选择数据类型。不要先把 Java 对象全部序列化成 JSON String,否则会失去服务端集合操作和细粒度更新能力。
Table of contents
Open Table of contents
先运行五种核心类型
进入缓存工程实验室下载,启动 Redis 后运行:
mvn -Dredis.uri=redis://:lab-password@localhost:6380 \
-Dtest=RedisIntegrationTest#modelsFiveCoreDataTypes test
测试分别写入会话、商品字段、任务列表、灰度用户集合和排行榜。五种类型的典型边界如下:
| 类型 | 结构 | 适合场景 |
|---|---|---|
| String | 一段字节、整数或浮点数 | 缓存值、计数器、状态位 |
| Hash | 一个 Key 下的字段和值 | 小型对象、局部字段更新 |
| List | 有序且可重复的序列 | 简单队列、最近记录 |
| Set | 无序且唯一的成员 | 标签、去重、集合运算 |
| Sorted Set | 成员唯一、按分数排序 | 排行榜、时间窗口、优先级 |
生产消息队列通常优先评估 Stream 或专业消息系统,因为 List 缺少完整的消费组、待确认与重投语义。
Key 也是数据模型
使用稳定、可读、可统计的命名,例如 product:{42}:detail:v3。冒号只是团队约定;Cluster 中花括号内容会参与 Hash Tag 计算,可让相关 Key 落在同一槽位,但也可能制造热点。
Key 应记录所有者、TTL、预计数量、值大小、敏感级别和删除方式。TTL 是 Time To Live,即剩余生存时间。缓存数据通常必须设置 TTL;幂等标记、锁和临时状态还要根据业务最长窗口设置上限。
选择前问四个问题
- 需要读取完整对象还是单个字段?
- 需要去重、排序、范围或集合运算吗?
- 一条命令能否完成必须原子的变化?
- 单个 Key 的成员数和字节数上限是多少?
参考 Redis 数据类型总览和数据类型比较。
下一步
继续阅读07-02 Redis 线程模型、I/O 多路复用与命令原子性,理解这些命令为什么快,以及什么操作会拖慢所有请求。