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秒 仅供参考