场景

个人搭建的一个美食教程网站,每个美食教程的详细页面有一个点赞按钮,每个用户可以通过点击按钮来点赞与取消点赞,并可以看见当前菜品有多少个赞。

实现思路

  1. 因为点赞与取消点赞是一个在页面上用户操作比较频繁的功能,而点赞数这个字段是存储在美食教程表里的,用户每点击一次按钮就要修改这个字段会产生很大的数据库开销,所以不考虑直接操作MySQL数据库,转而采用Redis进行存储。后面可采用Quartz框架进行定时的数据同步操作。

  1. 采用Redis存储就面临着该选择那一种数据结构来存储每一个教程的点赞数据。根据上面提到的场景可以做出分析:

  1. 一个教程可以有多个用户点赞;

  1. 一个用户只能给每一个教程点一次赞,再次点击就是取消点赞;

而Redis的集合刚好可以满足我们这一需求。因为集合成员是唯一的,集合中不能出现重复数据。

时序图

核心代码

前端点赞按钮:

 <div id="like" class="boxx-one" th:attr="dishId=${item.info.dishId}"><button th:if="${session.loginUser!=null}"></button>
</div><script type="text/javascript">var elementById1 = document.getElementById("like");elementById1.onclick = function () {var path = $("#like").attr("dishId")var p = document.getElementById("count")//发送ajax请求axios({//请求类型method: 'POST',//urlurl: 'http://item.meiwei.com/like',//设置请求体data: {dishId: path}}).then(function (res) {p.innerHTML = "已有" + res.data + "名用户点赞";})}
</script>

页面传给后端的Vo数据:

public class RequestVo {private String dishId;private String members;
}

后端核心代码:

    @ResponseBody@PostMapping("/like")public void like(@RequestBody RequestVo requestBody, HttpServletResponse response, HttpSession session) {String dishId = requestBody.getDishId();//获取用户信息MemberRespVo user = (MemberRespVo) session.getAttribute(AuthServerConstant.LOGIN_USER);String username = user.getUsername();String key = "like:" + dishId;//判断redis中是否存在,即判断是否已点赞Boolean ifAbsent = redisTemplate.opsForSet().isMember(key, username);if (!ifAbsent) {//如果不存在,则存入redislikeService.add(key, username);} else {//如果存在,则从redis删除likeService.delete(key, username);}//将点赞数回显Long size = likeService.getCount(key);try {response.getWriter().write(size.toString());} catch (IOException e) {e.printStackTrace();}}

Java代码实现点赞功能相关推荐

  1. php 点赞 代码,WordPress模板如何使用纯代码实现点赞功能?

    WordPress网站为了增加访客互动.展示文章热度,会添加一些阅读数.评论数等元素,其实还有一个比较好的元素,那就是点赞功能,跟QQ空间及朋友圈点赞一样.其实网上已经提供了很多点赞插件,但是更多的人 ...

  2. JAVA代码实现抽奖功能,自定义奖品以及奖品概率

    JAVA代码实现抽奖功能,自定义奖品以及奖品概率 大家好,我是梦辛工作室的灵,最近做了一个抽奖功能,然后自己为了以后方便和拓展 就封装了一下,可以自定义奖品 自定义权重 和 价格等信息,还可以自由设置 ...

  3. java ajax 点赞功能_Ajax+jQuery+bootstrap+Java实现异步点赞功能,并限制点击次数

    在很多的网站上有很多不同的点赞,我不知道他们是怎么实现的,下面我来分享一下我写的点赞实现,共大家参考下, 这是我在一个项目抽取的代码,可能有些样式会发生变化,但是功能不会影响. 网页代码: 这个是根据 ...

  4. 大数据 java 代码示例_功能Java示例 第7部分–将失败也视为数据

    大数据 java 代码示例 这是称为" Functional Java by Example"的系列文章的第7部分. 我在本系列的每个部分中开发的示例是某种"提要处理程序 ...

  5. 【计算机网络 15】简单几行Java代码实现迅雷功能,java流式编程原理

    public static void main(String[] args) throws Exception { //1.创建一个socket连接 Socket socket = new Socke ...

  6. java屏幕快速截图,java代码实现截图功能(屏幕截图)

    代码如下: import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Robot; import java.awt.T ...

  7. java购物系统点赞功能实现_springboot如何实现点赞功能

    在资讯类的项目中,我们常常遇到文章评论和点赞等功能实现.但是这些功能再项目中是高频出现的,如果直接操作数据库的话,对数据库压力太大.那遇到这个问题怎么解决? redis缓存 首先我们想到的就是添加缓存 ...

  8. eclipse中设置java、xml文件的字体大小以及代码自动提示功能

    设置字体大小: 在菜单windows-->prefereces里面,找到General-->Appearance-->Colors and Fonts, 设置xml文件字体大小:找B ...

  9. 基于java的微信小程序的实现(八)用户点赞/取消点赞功能相关后端接口开发

    文章目录 1.需求分析 2.用户的点赞与取消点赞的接口编写 1.数据库表结构分析 3.点赞接口的实现 1.需求分析 2.代码实现 4.用户取消点赞接口的实现 1.需求分析 2.代码实现 5.查询用户与 ...

最新文章

  1. 同软件多个线程设置不同ip_5-13网络编程(附带多线程死锁,线程通信)
  2. Redis的数据类型详解
  3. ckeditor源码编辑模式,添加style、javascript内容丢失的解决
  4. 知识图谱基础知识之一——人人都能理解的知识图谱
  5. VC中操作INI文件的API
  6. 【渝粤题库】陕西师范大学400006 公共关系学 作业(专升本)
  7. centos 安装tomcat_简单介绍Linux配置mysql,tomcat,Nginx 开机自启动的几个方式
  8. TensorFlow 之快速上手详解
  9. AI产品经理需要了解的数据知识:余弦相似度
  10. Idea搭建一个JavaWeb项目(一)
  11. 4.3一个“简陋”的打字程序
  12. JAVA常用的XML解析方法
  13. JVM Troubleshooting
  14. Object类中的wait()和notify()
  15. 《软件创富----共享软件创业之道》读后感
  16. 安装教程--010Editor
  17. 计算机游戏屏幕中,电脑屏幕上的游戏怎么录制
  18. android svg 线条动画教程,【Web动画】SVG 实现复杂线条动画
  19. 自车坐标系下的物体相对和绝对位置和速度计算
  20. vue-music 跨域获取QQ音乐歌单接口

热门文章

  1. 某乎上看到的专业技术解读
  2. Linux 安装WinUSB
  3. word使用的奇技淫巧
  4. 新手蓝牙耳机选购攻略,2021什么牌子蓝牙耳机不容易踩雷
  5. BIM算量与传统算量软件的对比和模型精准解决方案
  6. OpenGL 4 : 一个漂亮的心 For you, My Love
  7. 【UGP VR眼镜排行榜】2018VR眼镜眼镜哪个好?什么VR眼镜值得买?综合推荐十大热品
  8. No connected devices found; please connect a device, or see flutter.dev/setup for getting started in
  9. 稀里糊涂的攻防世界之easyRE1
  10. TCPIP详解Protocol 读书笔记(八) Traceroute程序