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

【黑马点评】达人探店

达人探店

发布探店笔记

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

  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, ...)自定义排序顺序,从而保证查询结果的顺序与原顺序一样。


http://www.kler.cn/a/288784.html

相关文章:

  • 如何使用 Web Scraper API 高效采集 Facebook 用户帖子信息
  • 淘宝代购系统;海外代购系统;代购程序,代购系统源码PHP前端源码
  • 数据挖掘(九)
  • Qt_day4_Qt_UI设计
  • 「Py」Python基础篇 之 Python都可以做哪些自动化?
  • DNS面临的4大类共计11小类安全风险及防御措施
  • 使用sass的混合插入模式进行@media响应式媒体查询做自适应开发
  • Github 2024-08-28 C开源项目日报 Top9
  • 算法笔试-编程练习-好题-03
  • 前端框架大观:探索现代Web开发的基石
  • react- native创建pdf
  • mysql学习教程,从入门到精通,MySQL介绍(1)
  • 设计模式及创建型模式-python版
  • C++ Qt进程间通信机制之QRO、QRemoteObjectHost
  • Anaconda安装并配置Python环境 | Python系列教程
  • 把设计模式用起来!(一)——楔
  • 【日常记录-JS】HTML5中使用SVG元素
  • LeetCode40 组合总和 II
  • 安卓model转鸿蒙ets
  • Centos挂载yum源
  • Spring框架
  • 店铺所有商品接口数据解析,JSON格式的示例
  • 在Spring Boot中实现请求IP白名单拦截
  • python-读取word中的内容
  • 代码随想录第二十天 | 513. 找树左下角的值,路径总和,106. 从中序与后序遍历序列构造二叉树
  • react|useState的异步渲染