*Redis CLIENT NO-TOUCH 命令

CLIENT NO-TOUCH 设置当前客户端连接是否更新所访问键的 LRU/LFU 时间戳。


*语法

CLIENT NO-TOUCH <ON | OFF>

*参数说明

参数 类型 必填 说明
ON / OFF Flag ON=不更新 LRU/LFU,OFF=正常更新

*返回值

  • OK:设置成功
  • Error:参数错误时返回

*时间复杂度

O(1)

*

*示例

*启用 NO-TOUCH(不影响 LRU/LFU)

> CLIENT NO-TOUCH ON
OK
> GET mykey
"value"

*禁用 NO-TOUCH(恢复正常更新)

> CLIENT NO-TOUCH OFF
OK

*常见错误

错误 原因 解决
ERR wrong number of arguments 未提供 ON/OFF 参数 必须指定 ON 或 OFF
ERR syntax error 参数不是 ON 或 OFF 使用 ON 或 OFF

*最佳实践

  • 用于监控、统计、备份等只读场景,避免影响正常业务的缓存策略
  • 例如:定时扫描键用于监控时,启用 NO-TOUCH 防止这些键变成"热键"
  • 在 LRU 策略下,防止后台任务将冷数据提升为热数据
  • 配合 CLIENT INFO 查看当前连接是否启用了 NO-TOUCH

*FAQ

Q1: NO-TOUCH 有什么用? A: 防止监控、扫描类操作干扰正常的 LRU/LFU 缓存淘汰决策,确保热键统计更真实。

Q2: NO-TOUCH 会影响读操作的返回结果吗? A: 不会,读操作正常返回数据,只是不更新键的最近访问时间戳。

Q3: 对写操作也生效吗? A: 写操作通常本身就更新访问时间,NO-TOUCH 主要影响读操作(GETLRANGE 等)的访问统计。