ZREVERANGEBYSCORE key max min WITHSCORES LIMIT offset count
max:第一次查询 当前时间戳 | 上一次查询的最小值
min:0
offset:第一次0 | 上一次查询的最小值的个数
count:固定值
// 查询收件箱中所有笔记 滚动分页
@Override
public Result queryBlogOfFollow(Long max, Integer offset) {
// 获取登录用户
UserDTO user = UserHolder.getUser();
// 查询收件箱中所有笔记 ZREVERANGEBYSCORE key MAX MIN LIMIT OFFSET count
String key = "feed:" + user.getId();
Set<ZSetOperations.TypedTuple<String>> typedTuples = stringRedisTemplate.opsForZSet()
.reverseRangeByScoreWithScores(key, 0, max, offset, 2);
// 非空判断
if(typedTuples == null || typedTuples.isEmpty()){
return Result.ok();
}
// 解析数据 blog的id minTime(时间戳) offset
List<Long> ids = new ArrayList<>(typedTuples.size());
long minTime = 0;
int os = 1;
for(ZSetOperations.TypedTuple<String> typedTuple:typedTuples){
// blog 的id
ids.add(Long.valueOf(typedTuple.getValue()));
// 获取分数
long time = typedTuple.getScore().longValue();
if(time == minTime){
os++;
}else {
minTime = typedTuple.getScore().longValue();
os = 1;
}
}
// 根据id查询blog
List<Blog> blogs = this.query().in("id", ids).last("order by field(id," + StrUtil.join(",", ids) + ")").list();
for (Blog blog : blogs) {
// 填充信息
Long userId = blog.getUserId();
User user1 = userService.getById(userId);
blog.setName(user1.getNickName());
blog.setIcon(user1.getIcon());
// 是否被点赞
isBlogLiked(blog);
}
// 封装并返回
ScrollResult scrollResult = new ScrollResult();
scrollResult.setList(blogs);
scrollResult.setMinTime(minTime);
scrollResult.setOffset(os);
return null;
}