redis获取所有key的方法

2023-12-04 0 927

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;
}

到此这篇关于redis获取所有key的方法的文章就介绍到这了,更多相关redis获取所有key内容请搜索悠久资源以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源!

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 Redis redis获取所有key的方法 https://www.u-9.cn/database/redis/67635.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务