/**
*
* @param jedis jedis
* @param pattern 模糊查询的key
* @param pageNum 页码
* @param pageSize 大小
* @return key集合
*/
public Set<String> jedisScan(Jedis jedis, String pattern, int pageNum, int pageSize) {
Set<String> keysTemp = new HashSet<>();
//当前位置
int current = 0;
//起始位置
int startIndex = (pageNum - 1) * pageSize;
//count代表一次拿取多少
ScanParams scanParams = new ScanParams().count(10000).match(pattern);
String cur = SCAN_POINTER_START;
do {
ScanResult<String> scan = jedis.scan(cur, scanParams);
List<String> result = scan.getResult();
int size = result.size();
if (result.isEmpty() || startIndex >= (size + current)) {
current += size;
cur = scan.getCursor();
continue;
}
//拿取的起始位置
int index = startIndex - current;
int marginSize = size - index;
if (marginSize >= pageSize) {
keysTemp.addAll(result.subList(index, index + pageSize));
break;
} else {
keysTemp.addAll(result.subList(index, size));
pageSize -= marginSize;
cur = scan.getCursor();
}
} while (!cur.equals(SCAN_POINTER_START));
return keysTemp;
}
Java中Jedis中使用SCAN模糊查询key(分页)
于 2024-01-12 16:15:01 首次发布