十次方项目开发系列【8】:对评论点赞功能开发 Redis的配置和使用
使用对评论点赞和取消点赞功能开发
- 一 评论点赞功能开发
- 1.1 先根据评论的id查询,再对点赞数加一
- 1.1.1 在CommentController添加方法
- 1.1.2 在CommentService中添加方法
- 1.2 使用MongoDB列值增长优化
- 1.2.1 在CommentService中修改thumbupByCommentId方法
- 1.2.2 重启ArticleApplication并测试
- 二 解决用户重复点赞问题
- 2.1 安装和整合Redis
- 2.1.1 在docker下安装Redis
- 2.1.2 在pox.xml中添加Redis依赖
- 2.1.3 在application.yml中的spring配置Redis
- 2.2 使用Redis解决无限点赞功能
- 2.2.1 在CommentController中添加
- 2.2.2 在CommentService添加取消点赞方法
- 结束
项目结构: 十次方项目开发系列【1】:项目介绍和工程搭建
一 评论点赞功能开发
1.1 先根据评论的id查询,再对点赞数加一
1.1.1 在CommentController添加方法
//PUT /comment/thumbup/{commentId} 根据评论Id点赞@RequestMapping(value = "/thumbup/{commentId}",method = RequestMethod.POST)public Result thumbupByCommentId(@PathVariable String commentId){commentService.thumbupByCommentId(commentId);return new Result(true,StatusCode.OK,"点赞成功");}
1.1.2 在CommentService中添加方法
public void thumbupByCommentId(String commentId) {// 点赞功能实现: 类似i++不保证线程安全,可能导致脏读Comment comment = commentRepository.findById(commentId).get(); //根据评论集合评论id查询评论功能comment.setThumbup(comment.getThumbup()+1);// 该评论的点赞数据+1commentRepository.save(comment); // 保存 }
1.2 使用MongoDB列值增长优化
注意:数值累加推荐使用列值增长方式
1.2.1 在CommentService中修改thumbupByCommentId方法
@Autowiredprivate MongoTemplate mongoTemplate; //注入模板public void thumbupByCommentId(String commentId) {
// 点赞功能优化:根据评论Id点赞,使用MongoDB的列增长功能Query query = new Query();// 封装修改的条件query.addCriteria(Criteria.where("_id").is(commentId));Update update = new Update();// 封装修改的数值update.inc("thumbup",1);mongoTemplate.updateFirst(query,update,"comment");}
1.2.2 重启ArticleApplication并测试
二 解决用户重复点赞问题
点赞功能完成后,发现可以重复点赞,我们应该改为一个人只能点赞一次。
可以使用评论id+用户id进行标记,一个用户只能点赞一次。可以使用redis保存点赞信息,速度较快
2.1 安装和整合Redis
2.1.1 在docker下安装Redis
- 下载好Redis镜像到docker下
- 查看所有镜像命令:
docker images
- 创建容器命令:
docker run -id --name tensquare_redis -p 6379:6379 redis
- 列出正在运行的容器:
docker ps
2.1.2 在pox.xml中添加Redis依赖
<!--添加springdataRedis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
2.1.3 在application.yml中的spring配置Redis
在Linux上输入ifconfig查询地址为192.168.200.128
redis: host: 192.168.200.128
2.2 使用Redis解决无限点赞功能
2.2.1 在CommentController中添加
@Autowired private RedisTemplate redisTemplate;//注入Redis//PUT /comment/thumbup/{commentId} 根据用户id和评论id判断是否执行点赞功能@RequestMapping(value = "/thumbup/{commentId}",method = RequestMethod.PUT)public Result thumbupByCommentId(@PathVariable String commentId){String userId = "123"; //获取用户IdObject flag = redisTemplate.opsForValue().get("thumbup_" + userId + "_" + commentId);//执行点赞方法前先查询if(flag == null || flag.equals(0)){ //commentService.thumbupByCommentId(commentId);redisTemplate.opsForValue().set("thumbup_" + userId + "_" + commentId,1);//点过攒将该数据拼接保存在redis内,value为1return new Result(true,StatusCode.OK,"点赞成功");}else{commentService.thumbupByCommentIdD(commentId); //如果已经点过赞则取消点赞redisTemplate.opsForValue().set("thumbup_" + userId + "_" + commentId,0);return new Result(true,StatusCode.OK,"取消点赞成功");}}
2.2.2 在CommentService添加取消点赞方法
//取消点赞方法public void thumbupByCommentIdD(String commentId) { //用户如果点过赞再次点击则取消点赞Query query = new Query();// 封装修改的条件query.addCriteria(Criteria.where("_id").is(commentId));Update update = new Update();// 封装修改的数值update.inc("thumbup",-1);mongoTemplate.updateFirst(query,update,"comment");}
结束
十次方项目开发系列【8】:对评论点赞功能开发 Redis的配置和使用相关推荐
- 十次方项目开发系列【10】:接口加密Eureka微服务和网关服务开发
学习目标 了解接口加密业务需求 掌握常用加密算法和密钥格式 实现十次方的接口加密微服务 文章目录 一 业务场景介绍 二 加密方式 2.1 摘要算法 2.2 对称加密 2.3 非对称加密 2.4 数字签 ...
- 当项目经理让我负责数据展示功能开发,我的内心为什么是拒绝的?
随着互联网行业的发展,各行各业都走上了数字化的道路.业务操作产生了大量数据,而数据只有汇总成报表才能为决策产出更大价值.报表的类型非常多样,比如最常见的财务类的资产负债表.制造业的出入库打印单.医药行 ...
- 使用JavaScript实现评论点赞功能
http://www.php.cn/js-tutorial-357679.html 首页> js教程> 正文 使用JavaScript实现评论点赞功能 作者: default|标签:jav ...
- Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App
安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneG ...
- SilverLight开发系列第1步:搭建开发环境
来自 http://www.cnblogs.com/kaima/archive/2008/08/17/1269637.html 在缺乏SilverLight中文教程的今天,新人要入门不容易,所以我根据 ...
- Windows Phone 7 开发系列教程之 初识Windows Phone 7,环境配置
简介篇 WP7 是微软推出的一款移动OS,用于对抗IPhone.Android,BlackBerry等其他的移动OS.目前最新的版本为Windows Phone 7.5,当然这是一个面向用户的版本号, ...
- 微信公众平台开发(24) 自定义菜单功能开发
原文: http://www.cnblogs.com/imaker/p/5491433.html 一.简介 微信公众平台服务号以及之前成功申请内测资格的订阅号都具有自定义菜单的功能.开发者可利用该功能 ...
- JavaScript实现评论点赞功能
通过分析评论功能的逻辑关系,学会如何使用JavaScript实现评论.回复.点赞等各种功能 1.学会JavaScript处理日期和时间. 2.掌握Dom操作中的添加/删除子节点方法. 3.使用setT ...
- 黑马十次方项目day08-11 消息总线组件SpringCloudBus
文章目录 一.SpringCloudBus简介 二. SpringCloudBus 代码的实现 2.1 配置服务端 2.2 配置客户端 一.SpringCloudBus简介 如果我们更新码云中的配置文 ...
最新文章
- Ubuntu 14.04安装openProj
- ML之GMM:Gaussian Mixture Model高斯混合模型相关论文、算法步骤相关配图
- java常见不可变类_Java语言不可变类的诀窍
- android studio开关按钮,Android studio实现滑动开关
- HALCON示例程序distance_transform.hdev通过distance_transform检测线的缺陷
- JNI----Native本地方法接口
- 1-100之间的奇数
- Android中ListView数据使用sAdapter.notifyDataSetChanged();方法不刷新的问题
- mediarecoder 安卓_android 通过MediaRecorder实现简单的录音示例
- 一文学会 Prometheus:开源系统监视和警报工具包!
- (转) 数字加密货币全球资源汇总
- 0基础Java自学之路
- 【MAC】手动下载安装docker
- 第十章 隐马尔可夫模型
- Java的责任链模式
- labview与android,LabVIEW与Android手机的无线视频实时传输
- VNC访问阿里云服务器
- 发动机和变速箱工作原理
- 微信小程序WXSS语法介绍
- [008]菠萝咕老肉的做法(全程图)
热门文章
- C语言 数据结构 顺序栈的实现 进栈 出栈 初始化
- Android的swift语言Kotlin中文开发文档
- Vue中好用的打印组件 vue-print-nb
- ajax获取上传文件的类型,ajax上传文件类型
- 数字电子基础课程设计——基于74LS90的电子时钟,可实现校准时分秒以及清零
- 关于IFRame的使用
- cc2530单片机的内核是什么_cc2530是什么_cc2530能做什么
- Linux运维之道之ENGINEER1.0(系统安全,高级连接,防火墙策略)
- R语言查看版本 R包查看版本
- python选手的最后得分_用Python进行体育竞技分析(预测球队成绩)!身家都下注了!...