Redis set数据结构如果用smembers 如果数据量较多的话,使用这个势必会造成线上redis卡顿一下,

1)该方法模糊匹配指定的Key
获得所有的key之后,可以遍历每一个key,取出key对应的值,进行具体的操作
// 开始游标
String cursor = "0";
// 扫描参数
ScanParams scanParams = new ScanParams();
scanParams.count(10000);
scanParams.match("HASH-TAG-*");
// 扫描结果
scanResult = jedis.scan(cursor, scanParams);
// 扫描后的游标,如果为0,则表明扫描结束
cursor = scanResult.getStringCursor();
// 获得扫描的所有key集合
List<String> keyList = scanResult.getResult();
2)获取所有的value值
这边定义一个集合,下面方法完成遍历后加入到集合中返回,可以拿到set结构中所有的value值
List<String> values = new ArrayList<>();
String cursor ="0";
ScanResult<String> scanResult;
do {
scanResult = jc.sscan(key,cursor);
cursor = scanResult.getStringCursor();
if (CollectionUtils.isNotEmpty(scanResult.getResult())){
values.addAll(scanResult.getResult());
}
//在这一步的时候内部已经迭代完成了,返回的肯定不是"0" 用do while结构比较合适点
}while (!"0".equals(cursor));
}
网友评论