Skip to content

练习 — 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:6379Ping 验证
  • 从环境变量 REDIS_ADDR 读取地址

练习 1.2 · String 存 AGV 状态

要求

  • SET device:AGV-001:state '{"x":1.2,"y":3.4,"battery":88}' EX 60
  • GET 并 Unmarshal JSON
  • 验证 60 秒后 key 过期(TTL 命令)

练习 1.3 · Hash 存设备字段

要求

  • HSET agv:AGV-001 status idle x 1.2 y 3.4 battery 88
  • HGETALL 读取
  • HINCRBY agv:AGV-001 battery -1 模拟耗电

Level 2 — 应用

练习 2.1 · Set 在线设备

要求

  • SADD online:devices AGV-001 AGV-002
  • SREM 模拟离线
  • SMEMBERS 列出在线列表
  • SISMEMBER 检查单设备是否在线

练习 2.2 · Sorted Set 速度排行

要求

  • ZADD agv:speed:rank 1.2 AGV-001 0.8 AGV-002 1.5 AGV-003
  • ZREVRANGE 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:statetwin: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