获取Redis集群中的所有密钥

jq6vz3qz  于 2023-03-11  发布在  Redis
关注(0)|答案(4)|浏览(170)

我使用的是Redis集群版本redis-5.0.5。我想查看我的Redis集群中存在的所有密钥。我知道对于单机版,我们使用KEYS *来获取所有密钥。
什么是查看Redis集群中所有密钥的方法?

$ redis-cli -h hostname -p 90001 -c 
hostname:90001> KEYS *
(empty list or set)

// I have data on my cluster
zour9fqk

zour9fqk1#

基本上,您需要在每个节点上运行KEYS *(请不要在生产环境中运行!)。cli可以使用'--cluster call'命令来完成此操作,如下所示:

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

bjp0bcyl2#

要求:
1.雷迪斯克利
1.鹰
1.格雷普
1.萨尔格斯
假设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节点以获取集群信息,然后在每个主节点上执行密钥扫描命令。

relj7zay

relj7zay3#

SCAN命令可能就是你要找的,但是它是O(N),所以你拥有的键越多,运行速度就越慢。另外,看看Marc Gravell的回答,了解另一种使用集合的方法:在StackExchange.Redis中通过键模式获取值

lp0sw83n

lp0sw83n4#

您可以使用以下命令扫描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. xargsredis-cli结合使用以运行所需的命令。-u标志可以在一个字符串中提供服务器地址和端口
    类似地,您还可以在每个群集节点上执行特定于节点的命令,请参见here
    另外,在上面的命令中,确保用实际的主机地址替换localhost,如果需要,提供一个带有-p的端口。请记住,虽然扫描密钥的成本低于KEYS *,但它仍然会影响性能。

相关问题