答案 1
在回答自己问题的良好传统中,以下是我的发现:
String key = "THEKEY";
ScanParams scanParams = new ScanParams().count(100);
String cur = redis.clients.jedis.ScanParams.SCAN_POINTER_START;
boolean cycleIsFinished = false;
while(!cycleIsFinished) {
ScanResult<Entry<String, String>> scanResult =
jedis.hscan(key, cur, scanParams);
List<Entry<String, String>> result = scanResult.getResult();
//do whatever with the key-value pairs in result
cur = scanResult.getStringCursor();
if (cur.equals("0")) {
cycleIsFinished = true;
}
}
重要的部分是cur是一个字符串变量,如果扫描完成,则为字符串变量。"0"
在ScanParams的帮助下,我能够定义每个块的近似大小,以便从哈希中获取。近似值,因为哈希值可能会在扫描期间更改,因此可能会在循环中返回元素两次。
答案 2
我不喜欢标志变量
Jedis jedis = new Jedis("localhost");
ScanParams scanParams = new ScanParams().count(10).match("*");
String cur = SCAN_POINTER_START;
do {
ScanResult<String> scanResult = jedis.scan(cur, scanParams);
// work with result
scanResult.getResult().stream().forEach(System.out::println);
cur = scanResult.getStringCursor();
} while (!cur.equals(SCAN_POINTER_START));
推荐
-
NamedNodeMap 的通用 foreach 迭代 在Java中,看看接口,你如何用泛型迭代它?它似乎使用Node而不是String,但我不太确定如何使用Node对象... 没有什么比这更好的了?
-
循环访问可变长度数组 如何迭代可变长度的 Java 数组。 我想我会设置一个 while 循环,但是我如何检测到我已经到达数组的末尾。 我想我想要这样的东西[只需要弄清楚如何表示myArray.notEndofArray()]
-
-
如何避免大型 if 语句和实例 动物 有没有更好的方法来迭代列表而不必强制转换?在上面的例子中,这似乎是可以的,但是如果你有基类的许多扩展,那么我们也需要那么多的扩展。是否有设计模式或原则来解决这个问题
-
HashMap或TreeMap或LinkedHashMap哪一个是迭代最快的? 我有一个在应用程序启动期间填满的。在应用程序执行期间,它不会在以后更改。稍后,此映射仅用于迭代其中的所有元素。我应该选择哪种具体实现? 或 ?更新广告订单无关紧要。唯一重要