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)
我在这里缺少什么?
您可能启用了集群模式。在集群模式下,您存储的数据按键分区。这样做的优点之一是,您现在可以拥有比一台机器合理容纳的数据集更大的数据集(如果需要,可以达到数百 TB),因为每个分片都包含整个数据集的一部分。
缺点是,如果密钥最终位于不同的哈希槽中,多密钥命令将不再像您期望的那样工作。该KEYS命令就是这样一个多键命令。
使长话短说:
KEYS显然只为您提供您正在访问的集群节点上的密钥。相反,给你一个错误可能会更好,但事实并非如此。GET不受影响:带有-c标志的 redis-cli 知道如何找到正确的集群节点(也许在击中错误的节点并被告知密钥有之后MOVED)。如果您向集群中的每个主节点询问KEYS *并将所有结果相加,您应该获得所有密钥。这个问题有一些使用 redis-cli 来执行此操作的示例。
| 归档时间: |
|
| 查看次数: |
4057 次 |
| 最近记录: |