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

qq网站官网dw做网站实例

qq网站官网,dw做网站实例,建设网站一般多钱,网站与网站做外链好吗【遇见青山】基于Redis的Feed流实现案例1.关注推送2.具体代码实现1.关注推送 关注推送也叫做Feed流,直译为投喂。为用户持续的提供"沉浸式”的体验,通过无限下拉刷新获取新的信息。 Feed流产品有两种常见模式: 这里我们实现基本的TimeL…

【遇见青山】基于Redis的Feed流实现案例

  • 1.关注推送
  • 2.具体代码实现

1.关注推送

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

在这里插入图片描述

Feed流产品有两种常见模式:

在这里插入图片描述

这里我们实现基本的TimeLine Feed流模式:

TimeLine Feed流模式有三种基本的实现方案:

拉模式:也叫做读扩散🦿

在这里插入图片描述

推模式:也叫做写扩散👣

在这里插入图片描述

推拉结合模式:也叫做读写混合,兼具推和拉两种模式的优点🤺

在这里插入图片描述

Feed流的实现方案分析:

在这里插入图片描述

点评类网站或App,宜使用推模式,短视频类网站或App,宜使用推拉结合模式⛷️


2.具体代码实现

需求分析:

  1. 修改新增探店笔记的业务,在保存blog到数据库的同时,推送到粉丝的收件箱
  2. 收件箱满足可以根据时间戳排序,必须用Redis的数据结构实现
  3. 查询收件箱数据时,可以实现分页查询

分析:实现滚动分页的方式

Feed流中的数据会不断更新,所以数据的角标也在变化,因此不能采用传统的分页模式,而要采用滚动分页,Redis数据结构中终于List和SortedSet支持分页,但List不支持滚动分页功能,所以Redis数据结构我们宜采用SortedSet!

在这里插入图片描述

首先,在保存博客的时候要推送给所有的粉丝(收件箱):

/*** 保存博客** @param blog 博客对象* @return 博客的ID*/
@Override
public Result saveBlog(Blog blog) {// 获取登录用户UserDTO user = UserHolder.getUser();blog.setUserId(user.getId());// 保存探店博文boolean isSave = save(blog);if (!isSave) {return Result.fail("新增笔记失败!");}// 查询笔记作者的所有粉丝List<Follow> follows = followService.query().eq("follow_user_id", user.getId()).list();for (Follow follow : follows) {Long userId = follow.getUserId();// 开始推送stringRedisTemplate.opsForZSet().add(FEED_KEY + userId, blog.getId().toString(), System.currentTimeMillis());}// 返回idreturn Result.ok(blog.getId());
}

实现具体的滚动分页查询:

/*** 滚动分页查询Feed流推送的博客** @param max    上一次查询的最小值,用于实现滚动查询* @param offset 偏移量,防止查询到重复数据* @return Result*/
@Override
public Result queryBlogOfFollow(Long max, Integer offset) {// 获取当前用户Long userId = UserHolder.getUser().getId();// 查询当前用户的收件箱Set<ZSetOperations.TypedTuple<String>> tuples = stringRedisTemplate.opsForZSet().reverseRangeByScoreWithScores(FEED_KEY + userId, 0, max, offset, DEFAULT_PAGE_SIZE);if (tuples == null || tuples.isEmpty()) {return Result.ok();}// 创建集合,保存idArrayList<Long> ids = new ArrayList<>(tuples.size());// 保存最小时间long minTime = 0;// 保存偏移量int os = 1;// 开始解析数据,得到最终的ids,minTime,offset(os)值for (ZSetOperations.TypedTuple<String> tuple : tuples) {// 获取id并保存ids.add(Long.valueOf(Objects.requireNonNull(tuple.getValue())));// 获取分数(时间戳)long time = Objects.requireNonNull(tuple.getScore()).longValue();if (time == minTime) {os++;} else {// 最后一个元组的时间一定是最小时间minTime = time;// 重置偏移量os = 1;}}String idStr = StrUtil.join(",", ids);// 根据id查询blogList<Blog> blogs = query().in("id", ids).last("ORDER BY FIELD(id," + idStr + ")").list();// 给每个blog封装点赞,作者等信息for (Blog blog : blogs) {// 查询blog有关的用户queryBlogUser(blog);// 查询blog的点赞信息,当前用户是否点过赞?isBlogLiked(blog);}// 返回博客集合给前端ScrollResult scrollResult = new ScrollResult();scrollResult.setList(blogs);scrollResult.setMinTime(minTime);scrollResult.setOffset(os);return Result.ok(scrollResult);
}
http://www.yayakq.cn/news/269273/

相关文章:

  • 网站图片优化网站开发要多少钱
  • wordpress 托管seo常见优化技术
  • 济南做html5网站网站设计实施方案
  • 以下哪个不是网站开发工具重要新闻
  • 号店网站建设公司上海营销型网站建设团队
  • 简阳建设网站公司九江 网站建设
  • 网站建设需求模版东营网站搭建
  • 网站服务器选购知名企业网站搭建
  • php做网站毕设答辩问什么站长之家seo信息
  • 苏州网站优化哪家好qq群推广引流
  • 旅游网站用dw怎么做最好的企业网站源码
  • 地方生活门户网站建设方案wordpress 礼物说模板
  • 安全的赣州网站建设如何做网络营销推广服务机构
  • 电商网站后台怎么做企业邮箱登录界面
  • 哪个网站可以领单做效果图全国定制网站服务器云主机
  • 做网站和维护网站广州网站建设模板制作
  • 网站高质量链群怎么做移动端网站如何做导出功能吗
  • 专业商城网站建设报价珠海高端网站设计
  • 门源县住房和城乡建设局网站拼多多网站建设的目的
  • 网站建设哪家技术好做dhl底单的网站是 什么
  • xp系统做网站服务器吗全球商业网
  • 天河区网站公司龙岗网站建设培训
  • php怎么用来做网站网站开发新手什么软件好
  • 网站建设注册小程序网站建设创意文案
  • 媒体村网站建设seo关键词排名优化工具
  • 医疗网站建设 中企动力400免费服务电话申请
  • 做印刷的网站有哪些大型企业网站建设
  • 网站换服务器百度不收录河北健康码app官网下载
  • 绵阳低价网站建设p2p网站建设费用
  • 那个网站可以做全景图wordpress底部版权信息