Redis 大数据量查询

Redis 大数据量查询

redis 从海量数据查询出某一固定前缀的key

先插入1000W条数据


import java.util.stream.IntStream;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Pipeline;

public class TestRedis {

  // 使用jedis实现pipeline调用
  public static void main(String[] args) {
    Jedis jedis = new Jedis("127.0.0.1", 6379);
    Pipeline pipeline = jedis.pipelined();
    long startTime = System.currentTimeMillis();
    IntStream.range(0, 10000000).forEach(it -> pipeline.set("k" + it, "v"+it ));
    pipeline.syncAndReturnAll();
    long endTime = System.currentTimeMillis();
    System.out.println(endTime - startTime);
  }
}

我们可以先使用dbsize 查看总共有多少数据

然后使用 keys k1*命令查询,查询出所有 k1前缀的数据,用时17秒.1111111条数据.

keys 的缺点一次性返回所有匹配的数据,key数据量过大会导致服务器卡顿,对内存消耗比较大,可能会阻塞服务器.

可以使用scan 命令

scan cursor match k1* count 10

基于游标的迭代器,需要基于上次一游标延续之前的迭代过程

cursor 游标, 以0作为游标开始一次新的迭代,知道命令返回游标0完全一次遍历.

不保证每次执行都会返回给定的数量,支持模糊查询

一次返回的数量不可控,大概率符合给定的参数