gpt4 book ai didi

java - Jedis 扫描未找到任何 key

转载 作者:IT王子 更新时间:2023-10-29 06:08:53 27 4
gpt4 key购买 nike

我想通过以下代码片段使用 Jedis 从 Redis 集群获取所有 key :

 public void testRedis() {
String key = "*";
ScanParams scanParams = new ScanParams().count(1000).match("{*}");
String cur = SCAN_POINTER_START;
do {
ScanResult<String> scanResult = getRedisCluster().scan(cur, scanParams);
scanResult.getResult().stream().forEach(System.out::println);
cur = scanResult.getStringCursor();
} while (!cur.equals(SCAN_POINTER_START));
}

我的问题是这个解决方案没有返回任何结果。即使我为现有 key 指定匹配模式,它仍然无法正常工作。我尝试使用 get 命令获取特定键,它返回值时没有任何错误,所以连接似乎很好。

有什么建议吗?(我的线索之一是匹配参数等待“大括号”,所以我不得不添加到那里,但我在互联网上的任何地方都没有看到这样使用它。)

最佳答案

从各个节点获取key,统一起来,就可以得到一个集群的所有key。

getClusterNodes() 方法会派上用场,它返回所有集群节点的映射。

这是一个使用 SCAN 的实现,类似于您的尝试:

public void testRedis() {
ScanParams scanParams = new ScanParams().count(1000);
Set<String> allKeys = new HashSet<>();
getRedisCluster().getClusterNodes().values().forEach((pool) -> {
String cur = ScanParams.SCAN_POINTER_START;
do {
try (Jedis jedis = pool.getResource()) {
ScanResult<String> scanResult = jedis.scan(cur, scanParams);
allKeys.addAll(scanResult.getResult());
cur = scanResult.getStringCursor();
}
} while (!cur.equals(ScanParams.SCAN_POINTER_START));
});
allKeys.stream().forEach(System.out::println);
}

更新:您可以检查条件以在获得至少 1000 个 key 后立即停止迭代。

public void testRedis() {
ScanParams scanParams = new ScanParams().count(1000);
Set<String> allKeys = new HashSet<>();
for (JedisPool pool : getRedisCluster().getClusterNodes().values()) {
String cur = ScanParams.SCAN_POINTER_START;
do {
try (Jedis jedis = pool.getResource()) {
ScanResult<String> scanResult = jedis.scan(cur, scanParams);
allKeys.addAll(scanResult.getResult());
cur = scanResult.getStringCursor();
}
if (allKeys.size() >= 1000) break;
} while (!cur.equals(ScanParams.SCAN_POINTER_START));
if (allKeys.size() >= 1000) break;
}
allKeys.stream().forEach(System.out::println);
}

关于java - Jedis 扫描未找到任何 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50017507/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com