获取Redis集群中所有key

问题描述 投票:0回答:5

我使用的是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 
redis command-line-interface redis-cluster
5个回答
24
投票

基本上,您需要在每个节点上运行

KEYS *
(请不要在生产中运行!)。 cli 可以使用“--cluster call”命令来执行此操作,如下所示:

redis-cli --cluster call hostname:90001 KEYS "*"

1
投票

要求:

  1. redis-cli
  2. awk
  3. grep
  4. xargs

也许可以尝试这个假设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扫描命令。


0
投票

SCAN
命令可能就是您正在寻找的命令,但它的时间复杂度为 O(N),因此您拥有的键越多,速度就越慢。另外,请查看 Marc Gravell 的答案,了解使用集合的另一种方法:在 StackExchange.Redis 中按键模式获取值


0
投票

您可以使用以下命令跨 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 和端口,并扫描每个节点上的密钥。

  1. redis-cli -h localhost CLUSTER NODES
    从集群配置中获取所有信息,包括要连接以运行命令的节点地址
  2. grep master
    仅选择主节点
  3. awk '{print $2}'
    选择包含 IP、端口和集群总线端口的第二列
  4. cut -f1 -d '@'
    截断集群总线端口
  5. xargs
    redis-cli
    结合运行所需的命令。
    -u
    标志可以在一个字符串中提供服务器地址和端口

同样,您也可以在每个集群节点上执行特定于节点的命令,请参阅此处


此外,在上面的命令中,请确保将

localhost
替换为您的实际主机地址,如有必要,请提供带有
-p
的端口。 请记住,虽然扫描按键的成本低于
KEYS *
,但它仍然会影响性能。


0
投票

有时您想要获取与模式(唯一列表)匹配的键,并且可以将其传递给像

DEL
这样的命令来删除它们。您可以使用以下命令:

redis-cli --cluster call REDIS_CLUSTER_ENDPOINT keys "pattern*"| grep -v "Calling keys" | cut -d ":" -f3 | grep "\S" | sort -u

免责声明:我没有在生产中使用数百万个密钥对其进行测试,因此使用时请注意。

© www.soinside.com 2019 - 2024. All rights reserved.