当前位置: 首页 > news >正文

【Redis实战篇】Feed流(关注推送)与滚动分页查询

  • 关注推送

    • 关注推送也叫做Feed流,直译为投喂。为用户持续的提供“沉浸式”的体验,通过无限下拉刷新获取新的信息。

    • Feed流的模式

      • Feed流产品有两种常见模式:
        • Timeline:不做内容筛选,简单的按照内容发布时间排序,常用于好友或关注。例如朋友圈。
          • 优点:信息全面,不会有缺失。并且实现也相对简单。
          • 缺点:信息噪音较多,用户不一定感兴趣,内容获取效率低。
        • 智能排序:利用智能算法屏蔽掉违规的、用户不感兴趣的内容。推送用户感兴趣信息来吸引用户。
          • 优点:投喂用户感兴趣信息,用户粘度很高,容易沉迷。
          • 缺点:如果算法不精准,可能起到反作用。
    • 本例中的个人页面,是基于关注的好友来做Feed流,因此采用Timeline的模式。该模式的实现方案有三种:

      • 1、拉模式
      • 2、推模式
      • 3、推拉结合
    • Feed流的实现方案1

      • 拉模式:也叫做读扩散。
        • 优点:比较节省内存空间。一般收件人的收件箱是空的,消息只在发件人的发件箱里保存一份,只有在收件人读取时才拉取发件人发件箱的信息(拷贝一份到收件人的收件箱,并按照时间做排序),读完之后不用了就会清理掉。
        • 缺点:读取延迟较高。收件人每次来读消息时,都得重新拉取发件箱的消息,然后再做排序,这些操作一般耗时较久,所以延迟较高。
    • Feed流的实现方案2

      • 推模式:也叫做写扩散。
        • 优点:读取延迟较低。发件人自身没有发件箱,当发件人有新消息时,直接将信息推送至收件人的收件箱进行存储并做好排序,收件人在读取信息时,不需要再做拉取信息的动作,直接读取收件箱即可。
        • 缺点:内存空间占用较多。由于发件人没有发件箱,所以当发件人有新消息时,需要将消息在每个收件人的收件箱中都保存一份,因此内存占用较高。
    • Feed流的实现方案3

      • 推拉结合模式:也叫做读写混合,兼具推和拉两种模式的优点。
        • 模式说明:将发件人分为大V(粉丝较多)和普通人(粉丝较少),将收件人分为活跃粉丝(读取消息频繁)和普通粉丝(读取消息频率不高)。对于大V,由于粉丝众多,若直接给所有粉丝的收件箱推送消息,内存消耗过大,且由于大多粉丝读取消息的频率不高,只有少部分活跃粉丝,所以可以采取“高活跃度粉丝直接推送,低活跃度粉丝在读取时主动拉取”的策略,在发送消息时将消息在发件箱里保存一份,同时推送给活跃粉丝;对于普通人,由于粉丝较少,直接将消息推送至所有粉丝的收件箱即可。

    • Feed流的三种实现方案对比

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

      • 需求

        • 1、修改新增探店笔记的业务,在保存blog到数据库的同时,推送到粉丝的收件箱。
        • 2、收件箱满足可以根据时间戳排序,必须用Redis的数据结构实现。
          • 思考:在Redis中,List和Set都可以实现排序和分页,那么当前场景应该选择谁呢?(先自己思考,后面会有分析)
        • 3、查询收件箱数据时,可以实现分页查询。
      • Feed流的分页问题

        • Feed流中的数据会不断更新,所以数据的角标也在变化,因此不能采用传统的分页模式。
      • Feed流的滚动分页

      • 总结:根据以上分析,因为不断会有新的数据插入,角标是不断变化的,传统的分页模式会导致数据重复查询问题。但由于SortedSet可以通过ZRANGEBYSCORE命令来获取指定score范围内的元素,所以SortedSet胜出,最终选择使用SortedSet。

      • 实现关注推送页面的分页查询(滚动分页查询)

        • 需求:在个人主页的“关注”卡片中,查询并展示推送的Blog信息:

        • 滚动分页查询功能分析

          • 在Redis命令行窗口可以通过以下命令实现滚动分页查询:

            • ZREVRANGEBYSCORE key Max Min WITHSCORES LIMIT offset count
          • 滚动分页查询参数:

            • max(最大分数):当前时间戳(第一次查询) 或 上一次查询的最小时间戳(除了第一次以外的查询)。
            • min(最小分数):0(固定不变)。
            • offset(偏移量):0(第一次查询) 或 在上一次的结果中,与最小值一样的元素的个数(除了第一次以外的查询)。
            • count(分页数据个数):3 。
        • 关键代码片段:

          • // 查询收件箱 ZREVRANGEBYSCORE key Max Min WITHSCORES LIMIT offset countStringkey=FEED_KEY+userId;Set<ZSetOperations.TypedTuple<String>>typedTuples=stringRedisTemplate.opsForZSet().reverseRangeByScoreWithScores(key,0,max,offset,2);// 解析数据: blogId、minTime(时间戳)、offsetList<Long>ids=newArrayList<>(typedTuples.size());longminTime=0;// 2intos=1;// 2for(ZSetOperations.TypedTuple<String>tuple:typedTuples){// 5 4 4 2 2// 4.1.获取idids.add(Long.valueOf(tuple.getValue()));// 4.2.获取分数(时间戳)longtime=tuple.getScore().longValue();if(time==minTime){os++;}else{minTime=time;os=1;}}// 根据id查询blogStringidStr=StrUtil.join(conjunction:",",ids);List<Blog>blogs=query().in(column:"id",ids).last(lastSql:"ORDER BY FIELD(id,"+idStr+")").list();// 这部分容易遗漏for(Blogblog:blogs){// 5.1.查询blog有关的用户queryBlogUser(blog);// 5.2.查询blog是否被点赞isBlogLiked(blog);}
http://www.gsyq.cn/news/1435560.html

相关文章:

  • Python逻辑回归分类
  • Translumo:打破语言障碍的实时屏幕翻译解决方案
  • 湖北行以学文教育怎么样?靠谱吗?中央电教馆授权招生机构深度评测 ——从官方授权、课程体系、服务体验、拿证效率多维度评测帮你判断这家机构是否靠谱 - 教育官方推荐官
  • 2026合肥黄金回收靠谱商家推荐,三大上门回收平台对比回收价格对比 + 避坑指南 - 资讯纵览
  • 不定长滑动窗口篇--罗姆的刷题记录
  • Python状态机模式
  • Midjourney Edits API 集成指南
  • 2026铣边机/坡口机厂家推荐榜:平板/封头/法兰加工设备TOP3厂家专业+技术+避坑全解析 - 资讯纵览
  • 为什么你的Mac需要智能应用清理工具?Pearcleaner的完整解决方案
  • CAJ转PDF在线转换器免费2026年完整指南|手把手教你快速转换
  • 2026无锡黄金回收多少钱一克?靠谱商家推荐TOP3,全域免费上门秒到账 - 资讯纵览
  • Python特征工程基础
  • 青州抽沙船厂家哪家好 - 舒雯文化
  • 基于Arduino的智能植物浇水系统:自适应阈值灌溉与物联网实践
  • 一键删除Gemini账户?别信!真实流程需完成这6项强制验证,第4步90%用户忽略
  • 紧急!Gemini API调用量突增237%背后的3个隐蔽攻击指纹——附Python自动化检测脚本(限24小时免费领取)
  • 如何一键解密QQ音乐加密文件:QMCDecode音频格式转换实战指南
  • Android逆向工程终极指南:用Androguard轻松掌握APK分析技术
  • Python滑动窗口算法
  • FUXA实战:工业流程管道动画制作全流程指南
  • 2026手把手教你PDF转CSV!工具+在线方法全套教程
  • Windows 11优化神器:用Win11Debloat一键打造纯净高效系统
  • 终极指南:如何在Windows上优雅使用BiliBili-UWP第三方客户端
  • Altium Designer PCB设计全流程:从原理图到生产文件的实战指南
  • 如何高效构建现代化电子签名功能:Signature Pad专业开发指南
  • 基于RP2040 Pico的125Msps任意波形发生器:DMA与PIO硬件加速实战
  • 服务网格Istio实战与微服务治理
  • 从光敏电阻到物联网:手把手教你制作智能酒精消毒提醒器
  • 如何用.NET Windows Desktop Runtime轻松部署Windows桌面应用?终极解决方案来了!
  • 2026终极测评:16款降AIGC软件测评,闭眼入这款就对了! - 降AI小能手