黑马点评学习-达人探店

需求1:实现查看发布探店笔记的接口

 接口说明:

因为在笔记中用户可以关注博主,因此需要返回笔记用户信息。

代码实现:

        Controller层:

         Service层:

需求2:点赞功能

需求3:点赞排行榜,显示最早点赞的5个人

因此数据不仅要求唯一,还要求能够根据时间进行排序和查找,而set不支持排序,因此需要更换其他数据结构存储点赞数据

因此选取SortedSet数据类型,但是SortedSet中没有直接判断是否为成员的方法,但可以通过ZSCORE查看分数是否存在,存在会返回分数,不存在返回空。

利用ZRANGE查询排行榜,会自动排序。

存储代码修改:

重复点赞:

判断是否存在:

查询操作时:

需要显示最早点赞的五个人

BUG修改:

        首页会显示博客,其中会查询用户是否点赞,而首页在未登录时也可以查看,因此查询业务需要修改,当用户为空时,直接return

        查询时点赞显示也会有问题,因为此时数据库查询语句中用的in作为条件,而in不会考虑顺序,因此需要加上order by field()

 

需求4:关注

        关注和取关

        共同关注

        关注推送

Java代码实现

关注取关:

查看是否关注:

实现共同关注功能

选取合适的Redis结构,求登陆用户和查看用户的关注列表交集,即可以选择SET数据结构

如果想使用Redis,则需要先将当前登录用户和目标用户的关注列表放入Redis中。

因此需要修改关注结构,使关注不仅放在数据库中,还放在Redis中

共同关注实现代码:

关注推送功能

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

这种模式由于每次会将收件箱清空,下次读取会重新从发件箱中收取,因此延迟高

这种模式会将消息发送给所有粉丝,不会清空,因此延迟低,但是占用内存高

数据会一直发生变化时,使用sortedSet实现分页功能

在保存探店笔记成功时,需要将笔记发送到粉丝收件箱中,因此在保存博客业务中,当保存笔记成功后,查询笔记作者的所有粉丝,然后推送笔记id给所有粉丝。

查询关注博客时需要做到滚动分页,因此利用Redis的SortedSet数据类型,利用ZREVERANGEBYSCORE命令进行滚动分页,设置好最大分数、offset和每页数量。

其中第一次分页时offset设置为0,其他页设置为1,因为最大值会设置为上次查询的最小分数,如果其余页offset仍设置为0,会重复查询。

上述逻辑在存在重复分数时会产生问题,此时查询时,如果当前最小分数是重复分数,而其正好全部出现在了上一页,下一页查询时以当前分数开始查询,offset设置为1仍会重复查询。

因此offset应该设置为上次查询结果中,所有分数为最小分数的样本数量。 

因此滚动分页查询时,max在第一次查询时设置为当前时间戳,其余查询时设置为上次查询时的最小时间戳,min设置为0,offset在第一次查询时设置为0,其余查询时设置为上次查询结果中与最小时间戳相同的样本熟练给,count设置为每页博客数量。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值