【黑马点评】达人探店

达人探店

发布探店笔记

探店笔记包括图片和文本两部分内容,分开上传。

  1. 用户发送上传图片的请求,请求体中携带笔记的图片数据。
  2. 将用户上传的图片保存到Nginx服务器相应目录下。
  3. 用户发送发布探店笔记的请求,请求体中携带笔记的文本内容。
  4. 将用户上传的文本保存到数据库的tb_blog表中。

查看所有探店笔记

分页查询的实现及优化

有两个参数:

  • currentPage:查看哪一页的数据
  • pageSize:每页记录数

limit分页:

  1. 先计算start(结果集从第几条记录开始)
  2. 然后查询从第start条记录开始的pageSize条记录:select * from tb_blog limit {start}, {pageSize};

分页查询优化:
腾讯云:如果谁再问你“如何优化mysql分页查询”,请把这篇文章甩给他
CSDN:分页查询原理
CSDN:面试官:Mysql千万级大表如何进行深度分页优化

查看特定探店笔记

用户查看探店笔记需要查询两部分内容:探店笔记和发布探店笔记的用户。
在实体类Blog中,增加三个与笔记作者相关的属性:userId、icon、name,由于这三个属性不是tb_blog中的字段,所以需要加上@tableField(exist = false)注解,并且需要手动赋值。

  1. 用户提交要查看的探店笔记的id。
  2. 根据id在tb_blog表中查询探店笔记,如果笔记不存在,则直接返回错误信息。
  3. 根据查询到的探店笔记的userId字段,在tb_user表中查询发布探店笔记的用户的信息,对Blog对象的userId、icon、name赋值。
  4. 将Blog对象返回给客户端。

点赞

tb_blog表中的liked字段记录每篇探店笔记的点赞数量。

需求:
同一个用户只能点赞一次,再次点赞则取消点赞。
如果当前用户已经点赞,则点赞按钮高亮显示。

在Redis中使用set数据类型缓存给每一篇博客点过赞的用户id,以博客id作为key。

在Blog类中增加一个isLike字段,表示当前用户是否给这篇探店笔记点过赞,需要加上@tableField(exist = false)注解。

在查看所有探店笔记和查看特定探店笔记的代码逻辑中:

  1. 后端通过查询Redis判断当前用户是否给该博文点过赞从而设置isLike字段的值。
  2. 前端根据返回数据中isLike字段的值来决定是否高亮显示点赞按钮。

点赞的代码逻辑中:
3. 用户提交要点赞的探店笔记的id。
4. 查询Redis,通过SISMEMBER命令判断当前用户是否已经对该笔记点过赞。
5. 如果没有点过赞,就将数据库中该笔记的liked字段值加1,并将当前用户id加入到该笔记对应的set集合中。
6. 如果已经点多赞了,就将数据库中该笔记的liked字段值减1,并将当前用户id从该笔记对应的set集合中删除。

点赞排行榜

需求:在探店笔记的详情页面,展示给该笔记最早点赞的TOP5用户。

改用zset数据类型存给每一篇博客点过赞的用户id,以博客id作为key,以点赞时间作为每一个用户id的score值。

在判断当前用户是否给该笔记点过赞时,使用zscore key userid来查询,如果返回元素的score值则说明存在,如果返回null则说明不存在。

在查询最早点赞的TOP5用户时,先通过zrange key 0 4查出最早点赞的TOP5用户的用户id,然后去数据库中通过select ... where id in (...)查出这几个用户的其他信息,注意要通过order by field (id, ...)自定义排序顺序,从而保证查询结果的顺序与原顺序一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值