Java实战:利用Redis实现高效分页+多条件模糊查询
import redis.clients.jedis.Jedis;
public class RedisFuzzySearch {
private Jedis jedis;
public RedisFuzzySearch() {
this.jedis = new Jedis("localhost", 6379);
}
public List<String> fuzzySearch(String keyPattern, int pageNum, int pageSize) {
// 使用SCAN命令配合MATCH和COUNT选项进行分页和模糊查询
String cursor = "0";
List<String> keys = new ArrayList<>();
int count = pageSize; // 每页的数量
String matchPattern = "*" + keyPattern + "*"; // 模糊匹配模式
do {
ScanParams scanParams = new ScanParams().match(matchPattern).count(count);
ScanResult<String> scanResult = jedis.scan(cursor, scanParams);
keys.addAll(scanResult.getResult());
cursor = scanResult.getCursor();
} while (!cursor.equals("0") && keys.size() < pageSize * pageNum);
// 截取当页数据
if (keys.size() > pageSize * (pageNum - 1)) {
keys = keys.subList(pageSize * (pageNum - 1), Math.min(keys.size(), pageSize * pageNum));
} else {
keys = new ArrayList<>(); // 没有更多数据时返回空列表
}
return keys;
}
public static void main(String[] args) {
RedisFuzzySearch searcher = new RedisFuzzySearch();
List<String> keys = searcher.fuzzySearch("user:123", 1, 10); // 第1页,每页10个
for (String key : keys) {
System.out.println(key);
}
}
}
这段代码使用了Redis的SCAN命令进行分页和模糊查询,通过keyPattern
参数接收查询条件,pageNum
和pageSize
分别表示页码和每页的数量。代码中使用ScanParams
设置了MATCH
和COUNT
选项,MATCH
用于设置模糊匹配模式,COUNT
用于指定每次扫描的数量。通过循环和cursor
的管理,实现了分页效果。在main
方法中提供了一个使用示例。
评论已关闭