Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Redis客户端库中初始化MapScanCursor?_Java_Redis_Lettuce - Fatal编程技术网

Java 如何在Redis客户端库中初始化MapScanCursor?

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 =

我正在尝试使用莴苣的同步命令进行HSCAN。问题是我无法找到初始化MapScanCursor的正确方法。我没有成功使用构造函数,MapScanCursor.INITIAL也没有给ScanCursor类型带来任何运气

以下是一个例子:

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();
    // …
}