1 分钟阅读大约 1 个月内
Redis 使用模式与 Claude Code:缓存、限流、分布式锁
Redis 滥用的方式很多:把它当 MySQL 用、缓存策略没想清楚、分布式锁写出 race condition。Claude Code 帮你在实现之前先把设计想对。
缓存策略设计:
claude "帮我设计这个场景的 Redis 缓存策略:
场景:电商商品详情页
- 商品基础信息(每天更新一次)
- 实时价格(每秒变化)
- 库存数量(高并发写入)
- 用户是否收藏(用户维度)
对每个数据:
1. 推荐的缓存模式(Cache-Aside、Write-Through、Write-Behind)
2. TTL 设置依据
3. 缓存 key 的命名规范
4. 缓存穿透/击穿/雪崩的防护方案
5. 数据一致性的处理方式"
限流实现:
claude "帮我实现 API 限流,用 Redis + Go:
需求:
- 每个用户每分钟最多 60 次请求
- 每个 IP 每秒最多 10 次请求
- 超限时返回 429,响应头包含 Retry-After
比较三种方案的实现:
1. 固定窗口计数器
2. 滑动窗口(使用 Sorted Set)
3. Token Bucket(令牌桶)
给出每种的 Redis 命令 + Go 实现,说明各自的精确性和性能 tradeoff。
推荐哪种?为什么?"
分布式锁(正确实现):
claude "用 Redis 实现分布式锁,但要实现正确:
需求:
- 防止定时任务重复执行
- 锁超时自动释放(避免死锁)
- 释放时只能释放自己的锁(不误释放他人的锁)
常见错误:
- SET key value → EXPIRE key 30(非原子性)
- DEL key(没验证是否是自己的锁)
正确实现:
1. Lua 脚本保证原子性
2. 锁值用随机 UUID(唯一性验证)
3. 如果持有者崩溃,锁如何自动过期?
4. 主从切换时锁的安全性(Redlock 方案是否必要)
给出完整 Go 实现,以及单元测试思路。"
Session 存储和 JWT 黑名单:
claude "设计 JWT 的 Redis 黑名单方案:
场景:用户登出时让 token 立即失效(JWT 默认是无状态的,改不了)
要求:
1. 只存必要信息(不是整个 token)
2. 自动清理过期记录(不用手动 GC)
3. 查询时间 O(1)
4. 多实例部署时一致性
方案:
- 存 jti(JWT ID)到 Redis Set,TTL = JWT 剩余时间
- 每次验证 JWT 时,先检查 jti 是否在黑名单
给出 Go 中间件实现。"
Pub/Sub 和消息队列:
claude "我需要用 Redis 实现简单的消息队列:
场景:
- 用户上传图片后,异步生成缩略图
- 任务量不大(每分钟 < 100 个)
- 需要失败重试(最多 3 次)
- 任务处理时间 < 5 秒
比较:
1. Redis List(LPUSH/BRPOP)
2. Redis Stream(XADD/XREAD)
哪个更适合这个场景?
给出实现方案(Go),包括:
- 任务发布
- Worker 消费
- 失败重试逻辑
- 死信队列(3 次失败后)"
Redis 数据结构选型:
claude "我需要实现这些功能,帮我选择合适的 Redis 数据结构:
1. 排行榜(实时更新,查 Top 100,查用户排名)
2. 标签系统(用户有多个标签,查有某个标签的所有用户)
3. 最近查看历史(每用户最多保留 20 条)
4. 活跃用户统计(今天有多少不同用户登录)
5. 好友关系(共同好友)
对每个场景:使用什么数据结构、关键命令、时间复杂度、内存估算。"
Redis 的正确使用姿态:它不是"快的数据库",而是特定问题的专用工具。用错数据结构,Redis 可能比 PostgreSQL 更慢;用对了,它解决 PostgreSQL 无法高效解决的问题。