这篇文章主要介绍“redis怎么获取所有key”,在日常操作中,相信很多人在redis怎么获取所有key问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”redis怎么获取所有key”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
keys:全量遍历键,用来列出所有满足特定正则字符串规则的key,假设redis此时正在生产环境下,使用该命令就会造成隐患,当redis数据量比较大时:
keys会一次性返回所有符合条件的key,所以会造成redis的卡顿。
SCAN是一个基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程。SCAN以0作为游标,开始一次新的迭代,直到命令返回游标0完成一次遍历。
此命令并不保证每次执行都返回某个给定数量的元素,甚至会返回0个元素,但只要游标不是0,程序都不会认为SCAN命令结束,但是返回的元素数量大概率符合count参数。另外,SCAN支持模糊查询。
1.keys cmos-cache包
redisCacheService.keys(String pattern);
2.scan方法
public static Set<String> getAllKey(String match,int count){
//返回集
Set<String> binKeys = new HashSet<>();
//封装scan查询参数
ScanParams param = new ScanParams().match(match).count(count);
//获取查询对象
RedisCacheServiceImpl redisCacheSer = (RedisCacheServiceImpl)RedisCacheService;
JedisCluster jedisClu = redisCacheSer.getJedisCluster();
//getClueterNodes获取集群节点,从各个集群中获取值进行遍历
jedisClu.getClusterNodes().values().stream().forEach(pool->{
boolean done = false;//
String cur = "0";//游标,以0开始,返回0代表一次结束
try(Jedis jedisNode = pool.getResource()){
while(!done){
ScanResult<String> scanResult = jedisNode.scan(cur,param);
cur = scanResult.getStringCursor();
if("0".equals(cur){done=true};
List<String> result = scanResult.getResult();
result.foreach(data->{binKeys.add(data)});
}
}
});
return binKeys;
}
版权声明:除特别声明外,本站所有文章皆是本站原创,转载请以超链接形式注明出处!