🗞️ Claude Code 日报/Redis 使用模式与 Claude Code:缓存、限流、分布式锁
1 分钟阅读大约 1 个月内

Redis 使用模式与 Claude Code:缓存、限流、分布式锁

#claude-code#redis#caching#rate-limiting#distributed-systems𝕏 分享

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 无法高效解决的问题。

← 上一篇SQL 与数据分析的 Claude Code 工作流下一篇 →多 Agent 编排:什么时候一个 Claude 不够用