首页/数据/Redis 进阶速查/客户端缓存与 tracking 表内存
内存与管理99 条

客户端缓存与 tracking 表内存

CLIENT TRACKING 让服务端记录客户端读过哪些键,变更时推送失效消息;tracking 表本身占内存,规模大时需要设上限。

Redis 进阶速查数据更新于 2026-10-13

客户端缓存与 tracking 表

CLIENT TRACKING 让服务端记住某个连接读过哪些键,键发生变化时主动推送失效消息,客户端据此丢弃本地缓存,省掉轮询与无谓的网络往返。代价在服务端:记录「谁读过哪些键」的 tracking 表本身要占内存,键数量与连接数越大开销越明显,因此有专门的表大小上限。

基本信息

命令CLIENT TRACKING ON 与 CLIENT TRACKING OFF
跟踪模式默认按实际读取记录,另有 BCAST 广播模式与 OPTIN、OPTOUT
表上限tracking-table-max-keys 限制 tracking 表规模
状态查看CLIENT TRACKINGINFO 看当前连接的跟踪状态
消息通道性能更好的客户端走 RESP3 推送,也可以 REDIRECT 到另一连接

两种跟踪方式

方式记录内容内存特征
默认模式逐个记录每个连接读过的键表大小与唯一键数量成正比
BCAST 模式按前缀广播变更,不逐键记录关注前缀数量与消息量即可
OPTIN 与 OPTOUT由 CLIENT CACHING 显式控制参与范围表内容取决于客户端选择
REDIRECT失效消息转发给指定连接便于集中处理,但需要额外的消息分发逻辑

示例

示例
redis-cli CLIENT TRACKING ON        # 开启跟踪
redis-cli CLIENT TRACKINGINFO      # 查看当前连接跟踪状态
redis-cli CONFIG GET tracking-table-max-keys
redis-cli CONFIG SET tracking-table-max-keys 2000000
redis-cli CLIENT TRACKING ON BCAST PREFIX user:
redis-cli CLIENT CACHING YES       # OPTIN 模式下显式开启本次跟踪

典型使用场景

  • 高读低写业务:本地缓存加失效通知,替代定时轮询
  • 降低服务端压力:减少无谓的重复读请求
  • 表规模评估:按唯一键数量估算 tracking 表的内存占用
  • 排查失效风暴:客户端频繁收到失效消息时检查前缀划分与写入频率
  • 协议选型:确认客户端是否支持 RESP3 推送,否则需用重定向方案
到达表上限后,服务端会淘汰 tracking 表中的键并向相关连接发送失效消息,客户端看到本地缓存被清掉属于预期降级,不是故障。
失效通知是异步的,键被修改到客户端收到消息之间存在窗口,业务要容忍短暂旧读;对强一致要求的读路径不要依赖本地缓存。

易错点

  • 把大量唯一键纳入跟踪,tracking 表内存持续攀升,触及上限后频繁失效
  • 依赖本地缓存做强一致读取,忽略失效消息的异步窗口
  • 只开跟踪不设表上限,键空间巨大时内存失控
  • 多个客户端共用一条重定向连接却不做消息分发,失效消息互相干扰
  • 上线前不做压测,失效消息风暴与客户端重连叠加放大故障

数据来源与参考

  • Redis 官方文档:客户端缓存与 tracking
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌