*Redis CLIENT CACHING 命令 启用或禁用下一请求的客户端缓存追踪
*语法说明
CLIENT CACHING YES | NO
*中文详细说明
CLIENT CACHING 命令用于在客户端缓存的 OPTIN 或 OPTOUT 模式下,控制对下一个命令中访问的 key 是否进行跟踪。
该命令与 CLIENT TRACKING 配合使用,实现服务器辅助的客户端缓存(Server-assisted Client-side Caching)。
工作原理:
- 当使用
CLIENT TRACKING on OPTIN启用跟踪时,默认不跟踪 key。此时在执行读取命令前调用CLIENT CACHING yes,可临时启用对下一个命令中 key 的跟踪。 - 当使用
CLIENT TRACKING on OPTOUT启用跟踪时,默认跟踪所有 key。此时调用CLIENT CACHING no,可临时禁用对下一个命令中 key 的跟踪。
该命令在连接中设置一个一次性状态,仅对紧接着的下一个命令生效,执行完即自动清除。
注意:只有在已启用 OPTIN 或 OPTOUT 模式的情况下才能使用此命令,否则返回错误。
*可运行示例
*示例 1:OPTIN 模式下启用对下一个命令的跟踪
# 启用 OPTIN 模式的客户端缓存跟踪
redis-cli CLIENT TRACKING on OPTIN
# 此时读取 key 不会被跟踪
redis-cli GET user:1001
# 使用 CLIENT CACHING yes 让下一个命令被跟踪
redis-cli CLIENT CACHING yes
redis-cli GET user:1001
预期输出:
OK
(nil)
OK
(nil)
*示例 2:OPTOUT 模式下禁用对下一个命令的跟踪
# 启用 OPTOUT 模式的客户端缓存跟踪
redis-cli CLIENT TRACKING on OPTOUT
# 默认所有读取都被跟踪
redis-cli GET product:2001
# 使用 CLIENT CACHING no 跳过对下一个命令的跟踪
redis-cli CLIENT CACHING no
redis-cli GET product:2001
预期输出:
OK
(nil)
OK
(nil)
*示例 3:不带参数或错误模式下的行为
# 未启用 OPTIN/OPTOUT 时直接调用会报错
redis-cli CLIENT CACHING yes
预期输出(未启用 tracking 时):
(error) ERR CLIENT CACHING is only valid when tracking is enabled in OPTIN or OPTOUT mode
*示例 4:完整缓存失效通知流程演示
# 连接 A:启用 RESP3 + tracking + OPTIN
redis-cli -3 CLIENT TRACKING on OPTIN
# 连接 A:使用 CACHING yes 读取并缓存 key
redis-cli CLIENT CACHING yes
redis-cli GET mykey
# 连接 B:修改同一个 key
redis-cli SET mykey "new_value"
# 连接 A:将收到失效通知(RESP3 push 消息)
预期输出(连接 A 收到失效通知):
OK
OK
(nil)
OK
>3 invalidate
+mykey
*返回值
- 简单字符串回复(Simple String):成功时返回
OK - 错误回复(Error Reply):未启用
OPTIN/OPTOUT模式时返回错误
*版本兼容性
| Redis 版本 | 变更说明 |
|---|---|
| >= 6.0.0 | 新增 CLIENT CACHING 命令,用于服务器辅助的客户端缓存 |
| < 6.0.0 | 不支持此命令 |
*时间复杂度
O(1) — 常量时间。仅设置一个连接级别的标志位。