*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 主要影响读操作(GET、LRANGE 等)的访问统计。