如何在Jedis中使用SCAN命令

时间:2015-11-21 10:02:16

标签: redis iteration jedis

我使用redis和jedis已经有一段时间了,到目前为止从未需要SCAN命令。但是现在我需要使用SCAN命令,特别是hscan。我理解它在redis级别上是如何工作的,但jedis Java包装器方面让我感到困惑。有ScanResultsScanParameter类流动,我没有明确的如何正确使用它们的概念。此功能的文档不存在或至少很难找到。任何人都可以指出在哪里可以找到如何使用hscan使用jedis迭代哈希的正确示例?

很抱歉没有代码,但到目前为止我所尝试的内容毫无意义。

3 个答案:

答案 0 :(得分:10)

我不喜欢标志变量

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));

答案 1 :(得分:3)

对上述示例的建议。您可以在scanParams类中指定密钥匹配。见下文。

ScanParams scanParams = new ScanParams();
    scanParams.match("*");

    String cursor = redis.clients.jedis.ScanParams.SCAN_POINTER_START;
    boolean cycleIsFinished = false;
    while (!cycleIsFinished) {

        ScanResult<String> scanResult = jedisRead.scan(cursor, scanParams);
        List<String> result = scanResult.getResult();

        /*
         * do what you need to do with the result
         */



        cursor = scanResult.getStringCursor();
        if (cursor.equals("0")) {
            cycleIsFinished = true;
        }
    }

答案 2 :(得分:1)

如果您习惯使用<body> <div id="bodyContent"> <select id="unitSelect" onchange="switchUnits()"> <option value="default">Default</option> <option value="metric">Metric</option> <option value="imperial">Imperial</option> </select> <ul> <li class="convertable-length">100 feet</li> <li class="convertable-length">100 meters</li> </ul> </div> </body>java.util.Iterator接口,则可以尝试使用基于Redis的框架Redisson

下面是一个示例,该示例如何迭代Redis中存储的名称为“ myMap”的地图的所有

java.lang.Iterable

下面是一个示例,说明如何迭代Redis中存储的所有

RedissonClient redissonClient = RedissonClient.create(config);

// implements java.util.concurrent.ConcurrentMap interface
RMap<String, String> map = redissonClient.getMap("myMap");

// default batch size on each HSCAN invocation is 10
for (String key: map.keySet()) {
    ...
}

// default batch size on each HSCAN invocation is 250
for (String key: map.keySet(250)) {
    ...
}

不是很简单吗?