跳到主要内容

分页查询

Redis 没有通用的页码查询。读取 List 时,LRANGE 按位置取范围,结束下标包含在内;LLEN 查询总长度:

LRANGE article:recent 10 19
LLEN article:recent

dbVisitor 用法

int pageNumber = 1;
int pageSize = 10;
long start = (long) pageNumber * pageSize;
List<String> rows = jdbc.queryForList(
"LRANGE ? ? ?",
new Object[] { "article:recent", start, start + pageSize - 1 },
String.class);
Long total = jdbc.queryForLong("LLEN ?", "article:recent");

这里直接从 Redis 读取第二页,不在客户端截取全部数据。不要传 Page 参数:Redis 没有 dbVisitor 分页方言。有序集合可用 ZRANGE 按排名取范围,ZCARD 查询总数。

注意事项

并发增删列表会改变元素位置,总数和范围读取也不是同一次操作。SCAN 是游标遍历,不是页码分页;COUNT 不能保证每批条数。

注意

当前适配器将 SCAN 游标附在每条结果行上,空批次无法取得游标,COUNT 还可能截断结果。需要完整遍历键时,请使用 Redis 客户端,不要依赖这条 JDBC 路径。