在使用 RedisTemplate 进行 Redis 分页查询时,可以利用 Redis 的 LIMIT 命令实现。使用 SCAN 命令遍历出所有满足条件的键,再使用 LRANGE 或 ZRANGE 命令获取指定范围内的值。示例代码如下:
String cursor = "0";
List<String> keys = new ArrayList<>();
do {
ScanOptions options = ScanOptions.scanOptions()
.match("user:*")
.count(100)
.build();
RedisConnectionUtils.doWithConnection(connection -> {
Cursor<byte[]> scan = connection.scan(options);
while (scan.hasNext()) {
keys.add(new String(scan.next()));
}
cursor = scan.getCursorAsString();
});
} while (!cursor.equals("0"));
// 分页查询
int pageNo = 1;
int pageSize = 10;
int start = (pageNo - 1) * pageSize;
int end = start + pageSize - 1;
List<String> values = redisTemplate.opsForList().range("user:*", start, end);
使用 RedisTemplate 进行 Redis 批量查询时,常见的问题包括:
示例代码如下:
List<String> keys = Arrays.asList("key1", "key2", "key3");
List<Object> values = redisTemplate.opsForValue().multiGet(keys);