从Redis获取密钥

时间:2019-12-21 05:58:24

标签: java redis

在Redis中是否可以一次获取n个键?

我在Redis中有超过一百万个密钥,我想准备一个每个有10万条记录的csv文件。我想获取10万个密钥并准备文件。

2 个答案:

答案 0 :(得分:3)

您可以将SCAN命令与COUNT选项一起使用。link

以下代码示例使用jedis作为Redis客户端。

    // Assuming redis is running on port 32768 on localhost
    // insert some records
    Jedis jedis = new Jedis("localhost", 32768);
    jedis.set("foo1", "bar1");
    jedis.set("foo2", "bar2");
    jedis.set("foo3", "bar3");
    jedis.set("foo4", "bar4");
    jedis.set("foo5", "bar5");

    // first value of cursor must be "0"
    String cursor = "0";

    // fetch 2 keys in every scan
    ScanParams scanParams = new ScanParams().count(2);

    do {
        ScanResult<String> scanResult = jedis.scan(cursor, scanParams);

        System.out.println("Keys for cursor ---> " + cursor);
        scanResult.getResult().forEach((key) -> {
            System.out.println("Key = " + key);
        });

        cursor = scanResult.getCursor();
    } while (!"0".equals(cursor));

在这里,我在每次扫描命令迭代中都获取2个密钥。 ScanResult中返回的光标值作为输入发送到下一个扫描命令。如果没有更多结果,则光标值为“ 0”。这用于表示for循环的终止。

在运行此示例时,我看到了以下输出。

Keys for cursor ---> 0
Key == foo1
Key == foo3
Keys for cursor ---> 4
Key == foo2
Key == foo
Keys for cursor ---> 1
Key == foo5
Key == foo4
Keys for cursor ---> 5

答案 1 :(得分:1)

使用RedisTemplate,通过使用keys方法,您可以获取Redis中的所有密钥,如下所示:

Spring doc:RedisTemplate

Set<String> allAvailableKeys = redisTemplate.keys("*"));
Iterator<String> iterator = allAvailableKeys.iterator();
List<String> allAvailableKeyList = new ArrayList<>();
while (iterator.hasNext()) {
       String key= iterator.next();
       allAvailableKeyList.add(key);
}

使用Java8:

Set<String> allAvailableKeys = redisTemplate.keys("*"));
List<String> allAvailableKeyList =allAvailableKeys.stream.collect(Collectors.toList());
相关问题