【黑马点评Redis——004达人探店】

1.发布探店笔记

在这里插入图片描述
在这里插入图片描述

2.点赞

利用Redis中的Set集合来判断是否点赞过。
在这里插入图片描述

3.点赞排行榜

可以通过SortedSet来按点赞时间进行排序。

在这里插入图片描述

4.好友关注

4.1.关注和取关

在这里插入图片描述
在这里插入图片描述

4.2.共同关注

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 可以通过set实现交集的功能

4.3.关注推送

在这里插入图片描述
在这里插入图片描述

4.3.1 拉模式

  • 拉模式(Pull),也叫读扩散:
    • 在拉模式中,消费者负责主动从消息队列或者消息服务器中拉取消息。
    • 消费者会定期轮询消息队列或者订阅主题,检查是否有新的消息可供处理。
    • 消费者决定何时拉取消息,以及每次拉取多少消息。
    • 这种方式相对消耗资源较少,因为消费者可以控制消息的获取速度,但可能导致消费者轮询频繁或者消息获取不及时的问题。
      在这里插入图片描述

4.3.2 推模式

  • 推模式(Push),也叫写扩散:
    • 在推模式中,消息生产者直接将消息推送给消费者,而无需消费者主动请求。
    • 生产者在消息就绪后即时地将消息发送给订阅者或者消息队列。
    • 消费者无需关心何时有新消息,只需要等待消息到达并及时处理。
    • 这种方式可以实时地将消息推送给消费者,但可能导致消费者处理不及时或者消息堆积的问题。
      在这里插入图片描述

4.3.3 推拉模式

  • 推拉模式结合了拉模式和推模式的优点。
    • 消费者可以通过订阅主题或者注册监听器等方式订阅消息,同时可以根据需要主动拉取消息。
    • 当有新消息到达时,消息服务器会主动推送消息给消费者;当消费者需要获取消息时,也可以主动拉取消息。
    • 这种方式结合了实时性和资源控制的优势,消费者可以根据自己的需求选择何时主动获取消息,何时等待消息推送。
    • 根据不同的用户提供不同的方案

在这里插入图片描述

4.3.4 方案比较

在这里插入图片描述

5.基于推模式实现关注推送功能

在这里插入图片描述

  • 需求一
    • 在保存blog到数据库的同时,推送到粉丝的收件箱(即利用SortedSet创建一个对应的redis字段,key为粉丝的id,结合中的内容为博客id和创建时间)

5.1 Feed流的分页问题

Feed流中的数据会不断更新,所以数据的角标也在变化,因此不能采用传统的分页模式。
在这里插入图片描述

解决办法
使用滚动分页
在这里插入图片描述

5.2 实现关注页面的分页查询

在这里插入图片描述

  • 利用每次查询都记住上一次查询的最小值
  • 第一页利用ZREVRANGEBYSCORE z1 maxValue 0 WITHSCORES LIMIT 0 sizeOfPage
  • 下一次可以通过利用上一次的最小值继续查询ZREVRANGEBYSCORE z1 lastMinValue 0 WITHSCORES LIMIT sizeOfLastValue sizeOfPage
  • 但有可能会出现score分数相同的情况,所以上面的偏移1可能会出问题
  • 所以这个偏移量应该是和上次最小值相同的个数

在这里插入图片描述

@Override
    public Result queryBlogOfFollow(Long max, Integer offset) {
        // 1.获取当前用户
        Long userId = UserHolder.getUser().getId();
        // 2.查询收件箱
        String key = FEED_KEY + userId;
        Set<ZSetOperations.TypedTuple<String>> typedTuples = stringRedisTemplate.opsForZSet()
                .reverseRangeByScoreWithScores(key, 0, max, offset, 2);
        // 3.非空判断
        if (typedTuples == null || typedTuples.isEmpty()){
            return  Result.ok();
        }
        // 4.解析收件箱:blogId、score(时间戳)、offset根我上次查询出的值
        ArrayList<Long> ids = new ArrayList<>(typedTuples.size());
        long minTime = 0;
        int os = 1;

        for (ZSetOperations.TypedTuple<String> tuple : typedTuples) {
            // 4.1.获取id
            ids.add(Long.valueOf(tuple.getValue()));
            // 4.2.获取分数(时间戳)
            long time = tuple.getScore().longValue();
            if(time == minTime){
                os++;
            }else{
                minTime = time;
                os = 1;
            }

        }
        // 5.根据id查询blog
        String idStr = StrUtil.join(",", ids);
        List<Blog> blogs = query()
                .in("id",ids)
                .last("ORDER BY FIELD(id,"+idStr+")").list();
        for (Blog blog : blogs) {
            queryBlogUser(blog);
            isBlockLiked(blog);
        }
        // 6.封装并返回
        ScrollResult r = new ScrollResult();
        r.setList(blogs);
        r.setOffset(os);
        r.setMinTime(minTime);
        return Result.ok(r);
    }

相关推荐

  1. 黑马点评面试问题

    2024-04-29 08:20:06       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-29 08:20:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-29 08:20:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-29 08:20:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-29 08:20:06       18 阅读

热门阅读

  1. 5.2 海思SS928开发 - kernle开发 - 构建脚本

    2024-04-29 08:20:06       9 阅读
  2. 12-python编写暴力破解poc

    2024-04-29 08:20:06       12 阅读
  3. Lambda表达式

    2024-04-29 08:20:06       11 阅读
  4. http响应,结合springboot

    2024-04-29 08:20:06       13 阅读
  5. 排序算法(总结)-C++

    2024-04-29 08:20:06       14 阅读
  6. 多线程执行List的addAll方法产生的并发问题

    2024-04-29 08:20:06       12 阅读
  7. 每天一个数据分析题(二百九十九)

    2024-04-29 08:20:06       13 阅读
  8. 牛客小白月赛92题解

    2024-04-29 08:20:06       10 阅读
  9. OSS 文件下载-Excel

    2024-04-29 08:20:06       12 阅读
  10. 【Firewall】服务器访问限制白名单

    2024-04-29 08:20:06       10 阅读
  11. 无人机在测绘领域的应用

    2024-04-29 08:20:06       11 阅读
  12. 41 对MVC,MVP,MVVM的理解

    2024-04-29 08:20:06       9 阅读
  13. 2385. 感染二叉树需要的总时间

    2024-04-29 08:20:06       13 阅读
  14. Spark RDD

    Spark RDD

    2024-04-29 08:20:06      7 阅读
  15. 从零学算法135

    2024-04-29 08:20:06       9 阅读