我正在尝试使用 Redis 的扫描功能,该功能需要调用,直到返回的光标为“0”。
这种方法有效,但感觉过于复杂 - 有没有一种方法可以在没有递归的情况下做到这一点?
Uni<Object> callScanRecursively(String cursorNum, List<String> results) {
List<String> args = new ArrayList<>(List.of(cursorNum, "MATCH", "*"));
return reactiveRedisClient.scan(args)
.onItem()
.transformToUni(item -> {
List<String> keysList = new ArrayList<>();
item.get(1).forEach(k -> {
keysList.add(k.toString());
});
results.addAll(keysList);
if (item.get(0).toString().equals("0")) {
return Uni.createFrom().item(results);
} else {
String nextCursorNum = item.get(0).toString();
return callScanRecursively(nextCursorNum, results);
}
}
);
}
List<String> results = new ArrayList<>();
String startingCursorRedis = "0";
callScanRecursively(startingCursorRedis, results)
.subscribe()
.with(item ->
LOGGER.info(item)
);