滚动分页查询 ZSet

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;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值