赞
踩
需求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设置为每页博客数量。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。