redis 用scan 代替keys 解决百万数据模糊查询超时问题

1.redis版本

Redis server v=2.8.24

2.pom文件redis版本

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.0</version>
</dependency>

  

3.scan搜索

Jedis jedis=RedisUtils.getConn();

ScanParams scanParams = new ScanParams();

scanParams.match(“key*”);
scanParams.count(100000);//每10万条查询
Long startTime = System.currentTimeMillis();
List<String> retList = new ArrayList<String>();
final String scanRet = "0";
do {
ScanResult<String> ret = jedis.scan(scanRet, scanParams);
scanRet = ret.getStringCursor();// 返回用于下次遍历的游标
retList.addAll(ret.getResult());// 返回结果
} while (!scanRet.equals("0"));
System.out.println("retList size:"+retList.size());
Long endTime = System.currentTimeMillis();
System.out.println("using time is:" + (endTime - startTime)+"ms");

我这局域网测试结果从700万数据搜索某个key耗时11秒 仅供参考

原文地址:https://www.cnblogs.com/zjk1/p/9619782.html