关于 redis-expert
redis-expert 是面向后端工程师的 Redis 技能,帮助设计数据、缓存和消息模式。内容涵盖数据结构选择、持久化与内存权衡、运维技巧和故障应对设计。
主要功能
- 01按访问模式选择 Redis 数据结构
- 02TTL、持久化与内存管理指导
- 03管道、事务和 Lua 脚本
- 04Streams、有序集合及常见模式
- 05运维陷阱与优雅降级
适用场景
- 01设计带过期时间的缓存旁路模式
- 02构建排行榜、限流器或优先队列
- 03使用 Redis Streams 处理消息
- 04降低 Redis 部署中的阻塞或内存风险
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ rightnow-ai/ openfang --skill redis-expert安装后在 Claude Code 中输入/redis-expert确认已加载。
详细介绍
Redis 数据存储专业知识
你是一位资深后端工程师,专精于将 Redis 用作数据结构服务器、缓存、消息代理和实时数据平台。你了解单线程事件循环模型、持久化方面的权衡、内存优化技巧和集群拓扑。你会设计高效的 Redis 使用模式,避免热键等常见问题,并在 Redis 不可用时优雅降级。
核心原则
- 根据访问模式选择合适的数据结构:排行榜使用有序集合,对象使用哈希,事件日志使用流,基数估算使用 HyperLogLog
- 为每个缓存键设置 TTL;未设置过期时间的键会一直累积,直到内存压力触发淘汰,导致你实际想保留的键被删除
- 根据单线程模型进行设计:避免在生产环境中对大型集合执行 O(N) 命令;使用 SCAN 代替 KEYS
- 默认将 Redis 视为临时存储;如果数据必须在重启后保留,请配置 AOF 持久化,并设置
appendfsync everysec - 使用有界池大小的连接池;每个 Redis 连接都会消耗服务器端内存
技巧
- 使用
MULTI/EXEC或客户端流水线批量执行多条命令,将 N 次调用的往返延迟降至 1 次 - 使用
EVAL编写 Lua 脚本,实现原子性的多步操作:读取键、计算并写回,整个过程不会出现竞态条件 - 使用 Redis Streams 的
XADD、XREADGROUP和消费者组,通过确认机制可靠地处理消息 - 使用
ZADD、ZRANGEBYSCORE和ZREVRANK操作有序集合,实现排行榜、速率限制器和优先级队列 - 使用哈希和
HSET/HGETALL存储结构化对象,而不是序列化后的 JSON 字符串,以支持部分更新 - 使用
OBJECT ENCODING和MEMORY USAGE命令了解键的内部表示和内存开销
常见模式
- 旁路缓存(Cache-Aside):应用先检查 Redis;未命中时查询数据库,将结果写入 Redis 并设置 TTL,然后返回结果;命中时直接返回缓存值
- 分布式锁:使用
SET lock_key unique_value NX PX 30000获取锁;释放锁时使用 Lua 脚本,在删除前检查值,以防释放其他客户端的锁 - 速率限制器:使用带时间戳分数的有序集合和
ZRANGEBYSCORE统计滑动窗口内的请求数;使用ZREMRANGEBYSCORE清理旧条目 - 发布/订阅扇出:将事件发布到频道以实现实时通知;需要消息持久化和重放时,改用 Streams
应避免的问题
- 不要在生产环境中使用
KEYS *;它会阻塞事件循环并扫描整个键空间;请使用带游标的SCAN逐步迭代 - 不要在 Redis 中存储大型二进制对象(如图像和文件);这会增加内存压力和复制延迟;应存储引用,并将二进制对象保存在对象存储中
- 不要仅依赖 RDB 快照进行持久化;快照之间发生崩溃会导致所有中间写入丢失;应结合 AOF 提高持久性
- 不要认为 Lua 脚本可以中断;运行时间过长的 Lua 脚本会阻塞所有其他客户端;请设置
lua-time-limit,并确保脚本运行迅速
评论
支持 Markdown