*Redis COMMAND-GETKEYS 命令

COMMAND-GETKEYS 从一条完整的 Redis 命令中提取它将要操作的所有 key。


*语法

COMMAND GETKEYS <full-command>

*参数说明

参数 类型 必填 说明
full-command String/Array 完整的 Redis 命令及参数,如 "MSET a 1 b 2"

*返回值

返回一个数组,包含该命令将访问的所有 key 名称。


*时间复杂度

O(M),M 为命令参数数量。


*示例

*从 MSET 提取 keys

> COMMAND GETKEYS MSET a 1 b 2 c 3
1) "a"
2) "b"
3) "c"

*从 SORT 提取 keys

> COMMAND GETKEYS SORT mylist BY weight:* STORE result
1) "mylist"
2) "result"

*常见错误

错误 原因 解决
ERR wrong number of arguments 未提供完整命令 必须提供至少命令名和一个参数
ERR unknown command 命令名不存在 检查命令拼写
ERR Invalid keys specified 命令参数格式不符合 key 提取规则 某些命令结构不支持自动提取

*最佳实践

  • 用于 Redis Cluster 的客户端实现,帮助判断命令涉及哪些 slot。
  • 在代理或中间件中分析命令的读写范围。
  • 注意某些命令(如 EVAL)的 key 提取依赖前缀规则。

*FAQ

COMMAND GETKEYS 和 COMMAND GETKEYSANDFLAGS 有什么区别? GETKEYSANDFLAGS 除了返回 key 还返回每个 key 的读写标志位。

EVAL 脚本能正确提取 key 吗? 可以,但要求脚本中 key 参数必须位于所有参数之前(Redis Cluster 规范)。

所有命令都支持提取吗? 大多数命令支持;部分命令(如 PUBLISH)不操作 key,返回空数组。