我正在使用以下命令连接到AWS Redis集群
redis-cli -c -h host.amazonaws.com -p 6379
我把两个键“X1”和“X2”从一个SpringBoot应用程序推入到redis缓存中(API方法没有用@Cacheable
注解),现在当我从cli终端运行KEYS *
时,它会列出“X1”或“X2”,但不会同时列出这两个。不过,两个密钥的Get都运行得很好。
info keyspace
回车如下;
关键字空间
db0:keys=11,expires=1,avg_ttl=1975400
我错过了什么吗?
1条答案
按热度按时间d7v8vwbk1#
您可能患有cluster mode enabled。在集群模式下,您存储的数据按键分区。这样做的好处之一是,您现在可以拥有比一台计算机(如果需要,可以达到数百TB)所能容纳的数据集更大的数据集,因为每个分片都包含整个数据集的一小部分。
一个缺点是,如果键在不同的散列槽中结束,则多键命令不再像您预期的那样工作。
KEYS
命令就是这样的多键命令。长话短说:
KEYS
显然只给了您正在访问的集群节点上的密钥。相反,给你一个错误也许会更好,但事实并非如此。GET
不受影响:带有-c
标志的redis-cli知道如何找到正确的集群节点(可能是在命中错误的节点并被告知密钥为MOVED
之后)。如果向集群中的每个主节点请求
KEYS *
,并将所有结果加在一起,您应该会得到所有键。This question有一些使用redis-cli执行此操作的示例。