• 缓存
  • 会话缓存
  • 时效性
  • 访问频率
  • 计数器
  • 社交列表
  • 记录用户判定信息
  • 交集、并集和差集
  • 热门列表与排行榜
  • 最新动态
  • 消息队列

十一项场景清单覆盖了 Redis 的常见用法,但清单式罗列缺两块:每个场景对应哪种数据结构与命令组合(落地能力),以及哪些场景今天已有更优替代(边界认知)。本文把清单升级为”场景 → 结构 → 命令 → 注意事项”的四元组手册。

场景-结构-命令映射表

场景 结构 核心命令 注意
缓存(对象/页面) String SET/GET/SETEX 过期策略+穿透/击穿/雪崩三防
会话缓存 String/Hash SET session:uid / HSET 多节点共享会话;敏感信息脱敏存储
时效性(过期业务) String TTL / Zset EXPIRE/TTL、ZRANGEBYSCORE 延迟队列用 Zset score=时间戳
访问频率限流 String+TTL / Zset INCR+EXPIRE、滑动窗口 ZADD+ZREMRANGEBYSCORE 固定窗口有临界突刺,滑动窗口更平滑
计数器 String INCR/INCRBY(原子) 点赞/浏览/库存预扣;持久化要求高需异步落库
社交列表(关注/粉丝) Set SADD/SREM/SISMEMBER 亿级大 Set 注意内存与 bigkey
共同好友/差异 Set SINTER/SDIFF/SUNION 服务端集合运算免拉取客户端
排行榜 Zset ZADD/ZINCRBY/ZREVRANGE/ZREVRANK score 复合(时间戳做次级序)技巧
最新动态(Feed) List/Zset LPUSH+LTRIM / ZADD 时间戳 推拉模式抉择:粉丝量分级推拉结合
消息队列 List/Stream LPUSH+BRPOP / XADD+XREADGROUP 简单队列用 List;需消费组/ack/回溯用 Stream
位图统计(签到/活跃) Bitmap SETBIT/BITCOUNT/BITOP 亿级用户日活仅 12MB
UV 统计 HyperLogLog PFADD/PFCOUNT 0.81% 误差换 12KB 固定内存
附近的人 Geo GEOADD/GEOSEARCH 底层 Zset,半径/多边形查询

清单中三项的深入说明

时效性:两类用法——key 级 TTL(验证码 5 分钟、限流窗口)与 Zset 时间轴(延迟任务、过期事件轮询)。注意 TTL 只在 key 级;hash 内字段过期需拆 key 或 Zset 辅助。

记录用户判定信息(如”是否已点赞/已读”):Bitmap 按位存(user:liked:articleId 的 bit=uid)比 Set 存 uid 省两个数量级内存;判定位 GETBIT O(1)。

交集并集差集:Set 运算在服务端 O(较小集合) 完成;大集合 SINTER 会阻塞单线程——亿级集合交集应离线计算或分片预处理,别让 bigkey 运算跑在主线程(与 KEYS * 同类风险)。

边界:哪些场景今天有更优替代

  • 消息队列:List 版无 ack/重试/消费组语义,生产级应上 Stream 或专业 MQ(Kafka/RocketMQ)——Redis 队列适合轻量内部任务
  • 持久化要求高的计数/库存:Redis 异步持久化可能丢秒级数据,核心账目以 DB 为准、Redis 做前置缓冲与异步对账
  • 全文检索:RediSearch 模块可用,但生态与能力不及 ES
  • 大对象存储:Redis 内存贵,图片/文件走对象存储,Redis 只存元数据/URL

使用红线(场景成立的共同前提)

  • 拒绝 bigkey(单 key >10MB 或元素 >10 万):删除阻塞、迁移卡顿、带宽尖刺
  • 拒绝 hotkey 单点:本地缓存(Caffeine)+ 多副本分散
  • 过期打散:批量 key 的 TTL 加随机抖动防雪崩
  • 内存监控:maxmemory + 淘汰策略明确(缓存场景 allkeys-lru)

Redis 场景手册的正确用法:先按四元组表选结构与命令,再对照边界清单确认”这个场景是否该用 Redis”,最后过一遍红线检查——场景、结构、边界三层齐备,清单才从”知道”变成”会用”。