*Redis CLIENT CACHING 命令 启用或禁用下一请求的客户端缓存追踪

*语法说明

CLIENT CACHING YES | NO

*中文详细说明

CLIENT CACHING 命令用于在客户端缓存的 OPTINOPTOUT 模式下,控制对下一个命令中访问的 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 的跟踪。

该命令在连接中设置一个一次性状态,仅对紧接着的下一个命令生效,执行完即自动清除。

注意:只有在已启用 OPTINOPTOUT 模式的情况下才能使用此命令,否则返回错误。

*可运行示例

*示例 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) — 常量时间。仅设置一个连接级别的标志位。