我使用的是Redis集群版本
redis-5.0.5
。我想查看 Redis 集群中存在的所有密钥。我知道对于独立版本,我们使用 KEYS *
来获取所有密钥。
如何查看Redis集群中的所有key?
$ redis-cli -h hostname -p 90001 -c
hostname:90001> KEYS *
(empty list or set)
// I have data on my cluster
基本上,您需要在每个节点上运行
KEYS *
(请不要在生产中运行!)。 cli 可以使用“--cluster call”命令来执行此操作,如下所示:
redis-cli --cluster call hostname:90001 KEYS "*"
要求:
也许可以尝试这个假设redis服务器驻留在
localhost
,默认端口6379
:
redis-cli cluster nodes | awk '{print $2" "$3}' | grep master | awk -F @ '{print $1}' | awk -F : '{print " -h "$1" -p "$2" --scan"}' | xargs -L 1 redis-cli -c
上面的较长版本基本问题(
90001
端口号认真吗?),您也可以更改模式(*
无过滤器)来过滤某些关键模式:
redis-cli -h hostname -p 90001 cluster nodes | awk '{print $2" "$3}' | grep master | awk -F @ '{print $1}' | awk -F : '{print " -h "$1" -p "$2" --scan --pattern *"}' | xargs -L 1 redis-cli -c
它连接到任意一个redis节点来获取集群信息,然后在每个主节点上执行keys扫描命令。
SCAN
命令可能就是您正在寻找的命令,但它的时间复杂度为 O(N),因此您拥有的键越多,速度就越慢。另外,请查看 Marc Gravell 的答案,了解使用集合的另一种方法:在 StackExchange.Redis 中按键模式获取值
您可以使用以下命令跨 Redis 集群中的节点扫描所有密钥:
redis-cli -h localhost CLUSTER NODES \
| grep master \
| awk '{print $2}' \
| cut -f1 -d '@' \
| xargs -I '{}' redis-cli -u redis://{} --scan --pattern '*'
TL;DR: 获取集群中所有节点的所有 IP 和端口,并扫描每个节点上的密钥。
redis-cli -h localhost CLUSTER NODES
从集群配置中获取所有信息,包括要连接以运行命令的节点地址grep master
仅选择主节点awk '{print $2}'
选择包含 IP、端口和集群总线端口的第二列cut -f1 -d '@'
截断集群总线端口xargs
与 redis-cli
结合运行所需的命令。 -u
标志可以在一个字符串中提供服务器地址和端口同样,您也可以在每个集群节点上执行特定于节点的命令,请参阅此处。
此外,在上面的命令中,请确保将
localhost
替换为您的实际主机地址,如有必要,请提供带有 -p
的端口。
请记住,虽然扫描按键的成本低于 KEYS *
,但它仍然会影响性能。