Redis cli - KEYS * 未显示所有键

7ms*_*ven 4 redis redis-cli redis-cluster

我正在使用以下命令连接到 AWS redis 集群

redis-cli -c -h host.amazonaws.com -p 6379
Run Code Online (Sandbox Code Playgroud)

我从 springboot 应用程序将两个键“X1”和“X2”推送到 redis 缓存中(API 方法未用注释@Cacheable,现在当我从 cli 终端运行时,KEYS *它会列出“X1”或“X2”,但不会同时列出两者。不过,两个键的 GET 都可以正常工作。

info keyspace返回以下内容;

键空间

db0:keys=11,expires=1,avg_ttl=1975400
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?

Wan*_*uta 5

您可能启用了集群模式。在集群模式下,您存储的数据按键分区。这样做的优点之一是,您现在可以拥有比一台机器合理容纳的数据集更大的数据集(如果需要,可以达到数百 TB),因为每个分片都包含整个数据集的一部分。

缺点是,如果密钥最终位于不同的哈希槽中,多密钥命令将不再像您期望的那样工作。该KEYS命令就是这样一个多键命令。

使长话短说:

  • KEYS显然只为您提供您正在访问的集群节点上的密钥。相反,给你一个错误可能会更好,但事实并非如此。
  • GET不受影响:带有-c标志的 redis-cli 知道如何找到正确的集群节点(也许在击中错误的节点并被告知密钥有之后MOVED)。

如果您向集群中的每个主节点询问KEYS *并将所有结果相加,您应该获得所有密钥。这个问题有一些使用 redis-cli 来执行此操作的示例。