外观
练习 — Redis 数据类型
对应知识点:
Redis· String · Hash · List · Set · Sorted Set · TTL 对应文档:docs/phase-05-redis/redis-data-types.md代码目录:workspace/phase-05/redis-demo/
前置条件:Redis 7+ 可连接(本地或 Docker)。
Level 1 — 基础
练习 1.1 · 连接 Redis
在 workspace/phase-05/redis-demo/ 创建项目:
要求:
github.com/redis/go-redis/v9- 连接
localhost:6379,Ping验证 - 从环境变量
REDIS_ADDR读取地址
练习 1.2 · String 存 AGV 状态
要求:
SET device:AGV-001:state '{"x":1.2,"y":3.4,"battery":88}' EX 60GET并 Unmarshal JSON- 验证 60 秒后 key 过期(TTL 命令)
练习 1.3 · Hash 存设备字段
要求:
HSET agv:AGV-001 status idle x 1.2 y 3.4 battery 88HGETALL读取HINCRBY agv:AGV-001 battery -1模拟耗电
Level 2 — 应用
练习 2.1 · Set 在线设备
要求:
SADD online:devices AGV-001 AGV-002SREM模拟离线SMEMBERS列出在线列表SISMEMBER检查单设备是否在线
练习 2.2 · Sorted Set 速度排行
要求:
ZADD agv:speed:rank 1.2 AGV-001 0.8 AGV-002 1.5 AGV-003ZREVRANGE WITHSCORES取 Top 3- 模拟 Web3D 大屏「AGV 速度榜」
练习 2.3 · List 任务队列
要求:
LPUSH agv:tasks "move-to-A1" "move-to-B2"BRPOP阻塞消费(goroutine 模拟 worker)- 注释 List 与 Stream 选型差异
Level 3 — 综合
练习 3.1 · 组合数据结构
要求:
- Hash 存实时状态 + Set 存在线集合 + ZSet 存速度榜
- 函数
UpdateAGVState(id, x, y, speed, battery)原子更新三者 - 使用 Pipeline 减少 RTT
练习 3.2 · 键命名规范
要求:
- 文档定义 key 命名:
{project}:{entity}:{id}:{field} - 示例:
twin:agv:AGV-001:state、twin:warehouse:WH-01:online - 实现
KeyBuilder辅助函数
Level 4 — 项目实践
练习 4.1 · AGV 实时状态 Redis 层
在 workspace/phase-05/redis-demo/ 实现:
要求:
internal/cache/agv_store.go:SaveState、GetState、ListOnline、TopSpeed(n)- 心跳 TTL 30 秒,过期自动从 online Set 移除(或定时清理)
- CLI 或 main 模拟 5 台 AGV 更新
- README:数据结构选型说明、redis-cli 验证命令
学习检查
- [ ] String 与 Hash 存 JSON 的取舍?
- [ ] TTL 在心跳场景中的作用?
- [ ] Set 与 ZSet 的区别?
- [ ] Pipeline 与 Transaction 的区别?
提交方式
检查答案 — redis data types 练习 X.X学习导航
上一篇:Repository 与 ORM · 对应知识文档 · 下一篇:Redis 缓存、Session 与 Pub/Sub