Redis 设计与使用助手
触发条件
当用户出现以下意图时激活本 Skill:
- 设计 Redis 缓存方案
- Key 命名规范 / TTL 策略设计
- 分布式锁 / 限流 / 队列方案
- Redis 数据结构选型
- "如何设计 xxx 的缓存"
设计流程(Agent 执行路径)
0. 版本检查 → 加载 references/version-major.md 对比用户版本,识别废弃项和重大变更。同时加载所有 version-X.Y.md(X.Y ≤ 用户目标版本),后续设计过程中 Agent 从已加载的上下文中自主匹配深度特性
1. 需求分析 → 理解缓存场景(读加速/写缓冲/会话/排行榜/队列)
2. 数据结构选型 → String/Hash/Set/ZSet/Stream/Bitmap 适用场景匹配
3. Key体系设计 → 加载 references/design-spec.md,按规范设计Key命名和TTL
4. 架构设计 → Cache-Aside/Write-Through/Write-Behind 选择
5. 使用指引 → 加载 references/usage-guide.md,给出场景化操作流程
6. 生产建议 → 加载 references/best-practices.md,给出持久化/集群/内存建议
7. 模板参考 → 加载 references/patterns.md,匹配业务模式模板
快速参考
数据结构选型速查
| 数据结构 | 适用场景 | 典型 Key |
|---|
| --------- | --------- | --------- |
| String | 缓存值/计数器/分布式锁/Session | user:1001:profile |
| Hash | 对象存储/配置项/用户信息 | user:1001 |
| List | 消息队列(简单)/最新列表/时间线 | msg:inbox:1001 |
| Set | 标签/共同好友/去重 | user:1001:tags |
| ZSet | 排行榜/延迟队列/评分排序 | rank:daily:score |
| Stream | 可靠消息队列(消费组/ACK) | mq:order:created |
| Bitmap | 签到/在线状态/布隆过滤器 | sign:202606:1001 |
| HyperLogLog | UV统计(12KB存亿级去重) | uv:page:home:20260603 |
Key 命名铁律
| 规则 | 正例 | 反例 |
|---|
| ------ | ------ | ------ |
| 格式:业务名:表名:ID | ugc:video:1 | video_1 |
| 冒号分隔层级 | user:1001:profile | user-1001-profile |
| 简洁:超长缩写 | u:1001:fr:m:2001 | user:1001:friends:messages:2001 |
| 禁止特殊字符 | order:1001:detail | order:1001: detail |
| 所有 Key 必须设 TTL | EX 3600 | 无 TTL |
Value 设计铁律
- 拒绝 bigkey — String ≤ 10KB,集合元素 ≤ 5000
- 对象用 Hash — 不用多个 String
- 实体存储用 Hash,不用多个 String
# ❌ 反例:多个String存对象
SET user:1:name "tom"
SET user:1:age "19"
# ✅ 正例:Hash存对象
HSET user:1 name "tom" age "19"
缓存模式速查
| 模式 | 写入策略 | 一致性 | 适用场景 |
|---|
| ------ | --------- | -------- | --------- |
| Cache-Aside | 先更新DB,再删缓存 | 最终一致 | 读多写少 |
| Write-Through | 同步写缓存+DB | 强一致 | 写少读多 |
| Write-Behind | 异步写DB | 最终一致 | 写多,容忍丢失 |
缓存问题三件套
| 问题 | 原因 | 解决方案 |
|---|
| ------ | ------ | --------- |
| 穿透 | 查不存在的数据 | 布隆过滤器 / 空值缓存(短TTL) |
| 击穿 | 热点Key过期瞬间大量请求 | 互斥锁 / 永不过期+异步刷新 |
| 雪崩 | 大量Key同时过期 | TTL随机打散 / 多级缓存 |
渐进式加载
详细内容按需加载 references/:
| 主题 | 文件 | 何时加载 |
|---|
| ------ | ------ | --------- |
| Key命名/TTL/数据结构选型/内存规划 | references/design-spec.md | Step 3 Key体系设计 |
| 场景化操作(缓存/锁/限流/队列/排行) | references/usage-guide.md | Step 5 使用指引 |
| 最佳实践(持久化/集群/内存/常见坑) | references/best-practices.md | Step 6 生产建议 |
| 业务模式模板(5类业务完整命令) | references/patterns.md | Step 7 模板参考 |
| 重大版本特性(废弃/依赖变更/新模块) | references/version-major.md | Step 0 版本检查(模块激活时即加载) |
| 深度版本特性 — 8.0(Hash字段过期/ACL分类/Stack内置/Vector Set) | references/version-8.0.md | Step 0 版本检查时自动加载(版本 ≤ 用户目标版本时) |
| 深度版本特性 — 7.0(Functions/ACLv2/Sharded PubSub) | references/version-7.0.md | Step 0 版本检查时自动加载(版本 ≤ 用户目标版本时) |
版本参考文档启用规则
- 模块激活时 — 始终加载
references/version-major.md,Agent 需主动对比用户使用的 Redis 版本,若存在废弃项或重大变更,立即提示用户 - 深度特性 Step 0 自动加载 — 版本检查时加载所有 version-X.Y.md(X.Y ≤ 用户目标版本)。设计过程中 Agent 从已加载的上下文中自主检索匹配相关特性,用户无需指定版本号
- 深度特性按大版本拆分,小版本持续追加 — 如
version-8.0.md 包含该大版本下所有小版本的设计级特性。更新时在文件中新增 ## X.Y.Z 版本节即可,不单开文件
硬规则
- 设计规范内容来自权威资料(阿里云Redis开发规范/Redis官方文档/AWS最佳实践),不编造
- 所有 Key 必须设置 TTL,Redis 不是垃圾桶
- 禁止 bigkey(String > 10KB / 集合 > 5000 元素)
- 禁止 KEYS *,使用 SCAN
- 集群环境 Lua 脚本 Key 必须在同一 slot(用 Hash Tag)
- 分布式锁必须设置超时 + 原子释放(Lua脚本)
- Pipeline 批量操作 ≤ 500 条