keys命令,模糊查询到需要的key,但这个操作只适合在测试环境中使用,不适合在生产环境中使用,原因是redis是单线程运行的,当redis中的数据量很大时,由于此操作会遍历所有数据,并将结果一次性全部返回,执行时间会比较长,从而导致后续操作等待,直接影响系统的正常运行。解决的办法是使用scan命令:
scan cursor [MATCH pattern] [COUNT count]
- cursor:表示游标,从“0”开始,此命令执行完后会返回一个新的cursor值。如果cursor!="0",则表示还有key未返回,需要再调用scan,并使用此新的cursor值,来获取下一批key;如果cursor=="0",则表示遍历结束。
- pattern:表示模糊匹配的样式
- count:表示一批最多返回多少条记录,默认为10
下面给出java代码的例子:
import java.util.List;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.ScanParams;
import redis.clients.jedis.ScanResult;
public class RedisTester {
public static Jedis getRedis() {
Jedis jedis = new Jedis("127.0.0.1", 6379);
System.out.println("connect successfully");
jedis.auth("XXXXXXXXXX");
return jedis;
}
public static void main(String[] args) {
Jedis jedis = getRedis();
String cursor = "0";
do {
ScanParams scanParams = new ScanParams();
scanParams.match("activity560.user*");
scanParams.count(10);
ScanResult<String> sr = jedis.scan(cursor, scanParams);
List<String> resultList = sr.getResult();
for (String result : resultList) {
System.out.println("key: " + result);
}
cursor = sr.getStringCursor();
System.out.println("cursor: " + cursor);
} while (!cursor.equals("0"));
}
}