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完全一次遍历.
不保证每次执行都会返回给定的数量,支持模糊查询
一次返回的数量不可控,大概率符合给定的参数