*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,返回空数组。