Java 如何在Redis客户端库中初始化MapScanCursor?
我正在尝试使用莴苣的同步命令进行HSCAN。问题是我无法找到初始化MapScanCursor的正确方法。我没有成功使用构造函数,MapScanCursor.INITIAL也没有给ScanCursor类型带来任何运气 以下是一个例子:Java 如何在Redis客户端库中初始化MapScanCursor?,java,redis,lettuce,Java,Redis,Lettuce,我正在尝试使用莴苣的同步命令进行HSCAN。问题是我无法找到初始化MapScanCursor的正确方法。我没有成功使用构造函数,MapScanCursor.INITIAL也没有给ScanCursor类型带来任何运气 以下是一个例子: RedisClient redisClient = RedisClient.create("redis://" + url + ":" + port); RedisHashCommands<String, String> redisCommands =
RedisClient redisClient = RedisClient.create("redis://" + url + ":" + port);
RedisHashCommands<String, String> redisCommands = redisClient.connect().sync();
List<String> fields = new LinkedList<>();
MapScanCursor<String, String> scanCursor = ?
do {
scanCursor = redisCommands.hscan(key, scanCursor);
fields.addAll(scanCursor.getMap().keySet());
} while (!scanCursor.isFinished());
如何初始化scanCursor?您有两个选项:
要回答您的问题,只需使用hscankey初始化scanCursor
更新
根据tcfritchman的评论,更新了基于do…while的方法。感谢您提供了一个很好的备选方案,并给出了有用的答案。这解决了我的问题。不过,一个小问题是,当使用第一个选项时,您必须检查!scanCursor.isFinished,然后再次调用hscan。否则,如果扫描在第一次调用时完成,将出现错误。例如:scanCursor=redisCommands.hscankey;虽然scanCursor.isFinished{scanCursor=redisCommands.hscankey,scanCursor;fields.addAllscanCursor.getMap.keySet;}
MapScanCursor<String, String> scanCursor = null;
do {
if (scanCursor == null) {
scanCursor = redisCommands.hscan(key);
} else {
scanCursor = redisCommands.hscan(key, scanCursor);
}
fields.addAll(scanCursor.getMap().keySet());
} while (!scanCursor.isFinished());
ScanIterator<KeyValue<String, String>> iterator = ScanIterator.hscan(redisCommands, key);
while (iterator.hasNext()) {
KeyValue<String, String> next = iterator.next();
// …
}