redis——实战点赞

点赞功能随处可见,我们都知道点赞是一个非常高频的操作,redis就非常适合做这种工作。

实现效果:

分析:三种类型:给帖子点赞,给评论点赞,给回复点赞

我们只实现查看点赞数量的话,只要一个int记录一下就可以,但是我们之后还想查看点赞的人,所以要把每一个点赞的信息都记录好,方便后面的功能继续做出来。

思路:

点赞:把点赞的信息放进去。

取消:把点赞的信息删除。

在此之前,我们要封装一个get到key的类,方便后面复用。

package com.now.community.community.util;public class RedisKeyUtil {private static final String SPLIT = ":";private static final String PREFIX_ENTITY_LIKE = "like:entity";private static final String PREFIX_USER_LIKE = "like:user";// 某个实体的赞// like:entity:entityType:entityId -> set(userId)public static String getEntityLikeKey(int entityType, int entityId) {return PREFIX_ENTITY_LIKE + SPLIT + entityType + SPLIT + entityId;}// 某个用户的赞// like:user:userId -> intpublic static String getUserLikeKey(int userId) {return PREFIX_USER_LIKE + SPLIT + userId;}
}

点赞业务:

    // 点赞public void like(int userId, int entityType, int entityId, int entityUserId) {redisTemplate.execute(new SessionCallback() {@Overridepublic Object execute(RedisOperations operations) throws DataAccessException {String entityLikeKey = RedisKeyUtil.getEntityLikeKey(entityType, entityId);boolean isMember = operations.opsForSet().isMember(entityLikeKey, userId);operations.multi();if (isMember) {operations.opsForSet().remove(entityLikeKey, userId);} else {operations.opsForSet().add(entityLikeKey, userId);}return operations.exec();}});}

我们要查找是否点赞,还有点赞数量,方便页面显示:

    // 查询某实体点赞的数量public long findEntityLikeCount(int entityType, int entityId) {String entityLikeKey = RedisKeyUtil.getEntityLikeKey(entityType, entityId);return redisTemplate.opsForSet().size(entityLikeKey);}// 查询某人对某实体的点赞状态public int findEntityLikeStatus(int userId, int entityType, int entityId) {String entityLikeKey = RedisKeyUtil.getEntityLikeKey(entityType, entityId);return redisTemplate.opsForSet().isMember(entityLikeKey, userId) ? 1 : 0;}

点赞LikeController

    @RequestMapping(path = "/like", method = RequestMethod.POST)@ResponseBodypublic String like(int entityType, int entityId,int entityUserId,int postId) {User user = hostHolder.getUser();// 点赞likeService.like(user.getId(), entityType, entityId,entityUserId);// 数量long likeCount = likeService.findEntityLikeCount(entityType, entityId);// 状态int likeStatus = likeService.findEntityLikeStatus(user.getId(), entityType, entityId);// 返回的结果Map<String, Object> map = new HashMap<>();map.put("likeCount", likeCount);map.put("likeStatus", likeStatus);return CommunityUtil.getJSONString(0, null, map);}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445160.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

network

1.网络结构 在OSI参考模型中&#xff0c;物理层的作用是透明的传输比特流。对等实体在一次交互作用中传送的信息单位称为协议数据单元&#xff0c;它包括控制信息和用户数据两部分。上下层实体之间的接口称为服务访问点(SAP)&#xff0c;网络层的服务访问点也称为网络地址&…

NLP复习资料(4)-第八章 句法分析

NLP复习资料-第八章国科大&#xff0c;宗老师《自然语言处理》课程复习笔记&#xff0c;个人整理&#xff0c;仅供参考。第八章&#xff1a;语法理论&#xff08;第三章的后续&#xff09; 1.出发点chomsky的四类文法过于泛化&#xff0c;生成能力太强了&#xff0c;会生成没有…

大数据学习(10)--流计算

文章目录目录1.流计算的概述1.1 什么是流数据&#xff1f;1.2 批量计算和实时计算1.3 流计算的概念1.4 流计算和Hadoop1.5 流计算框架2.流计算的处理流程2.1 流计算处理基本概念2.2 数数据的实时获取2.3 数据的实时计算2.4 实时查询任务3.流计算的应用和开源框架Strom3.1 流计算…

network---written test

1、OSI&#xff08;Open System Interconnect&#xff09;&#xff1a;开放系统互联&#xff0c;是一个七层的计算机网络模型&#xff0c;分别为&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 TCP/IP&#xff08;Transmission Control Protocol/…

redis——实战关注

效果&#xff1a; 思路&#xff1a;很好想&#xff0c;把自己的粉丝和自己关注的人都存起来&#xff08;set即可&#xff09;&#xff0c;做增删改查。 package com.now.community.community.service;import com.now.community.community.entity.User; import com.now.commun…

NLP复习资料(5)-第九章 句法分析

NLP复习资料-第九章1.短语结构分析2.短语结构分析方法的评估指标3依存句法分析器设计P134依存句法分析器性能评价5短语结构与依存结构能够相互转换6汉英句法结构对比7汉语长句的层次化句法分析国科大&#xff0c;宗老师《自然语言处理》课程复习笔记&#xff0c;个人整理&#…

神经网络中的优化算法总结

在调整模型更新权重和偏差参数的方式时&#xff0c;你是否考虑过哪种优化算法能使模型产生更好且更快的效果&#xff1f;应该用梯度下降&#xff0c;随机梯度下降&#xff0c;还是Adam方法&#xff1f; 这篇文章介绍了不同优化算法之间的主要区别&#xff0c;以及如何选择最佳的…

OS --written test1

241&#xff0e;在提供虚拟存储的系统中&#xff0c;用户的逻辑地址空间主要受( )的限制。A.内存空闲块的大小 B&#xff0e;外存的大小 C&#xff0e;计算机编址范围 D&#xff0e;页表大小答案&#xff1a;C242&#xff0e;在分时系统中&#xff0c;时间片一定&#xff0c;( …

Java开发需要知道的HTML知识

概述 HTML(HyperText Markup Language) 不是一门编程语言&#xff0c;而是一种用来告知浏览器如何组织页面的标记语言。 HTML 可复杂、可简单&#xff0c;一切取决于开发者。它由一系列的元素组成&#xff0c;这些元素可以用来包围不同部分的内容&#xff0c;使其以某种方式呈…

OS-written test2

操作系统各大公司笔试题汇总 1、在段页式存储管理中&#xff0c;其虚拟地址空间是&#xff08;&#xff09; A、一维 B、二维 C、三维 D、层次 答案&#xff1a;B 2、采用( )不会产…

Ubuntu18.04上安装RTX 2080Ti显卡驱动

文章目录1.安装Linux系统1.1下载Linux镜像文件1.2 制作系统盘1.3 安装Linux系统1.4 配置linux系统2.安装英伟达显卡驱动2.1 预备工作2.2 安装显卡驱动3.安装cuda4.安装cudnn1.安装Linux系统 1.1下载Linux镜像文件 根据电脑配置和自己的爱好&#xff0c;选择合适的Linux镜像文…

OS

操作系统笔试题及答案一 1&#xff0e;在下列系统中&#xff0c;( )是实时系统。 A.计算机激光照排系统 B.航空定票系统 C&#xff0e;办公自动化系统 D.计算机辅助设计系统 答案&#xff1a;B 2&#xff0e;操作系统是一种( )。 A.应用软件 B&#xff0e;系统软件 C&#xff…

NLP复习资料(6)-第十章 语义分析

NLP复习资料-第十章1语义理论简介2格语法4语义网络5词义消歧5语义角色标注6词向量表示7篇章分析国科大&#xff0c;宗老师《自然语言处理》课程复习笔记&#xff0c;个人整理&#xff0c;仅供参考。语义分析&#xff1a;P3解释句子或篇章的含义&#xff0c;主要困难&#xff08…

处理机调度与死锁

处理机调度与死锁 处理机调度的层次 高级调度 高级调度又称为作业调度或长程调度&#xff0c;其主要功能是根据某种算法&#xff0c;把外存上处于后备队列中的那些作业调入内存&#xff0c;也就是说&#xff0c;它的调度对象是作业。 1.作业和作业步 作业&#xff1a;一个比程…

各种卷积

从最开始的卷积层&#xff0c;发展至今&#xff0c;卷积已不再是当初的卷积&#xff0c;而是一个研究方向。在反卷积这篇博客中&#xff0c;介绍了一些常见的卷积的关系&#xff0c;本篇博客就是要梳理这些有趣的卷积结构。 阅读本篇博客之前&#xff0c;建议将这篇博客结合在一…

springboot——kaptcha

导入包&#xff1a; <dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.2</version></dependency> 配置类&#xff1a; package com.now.community.community.config;import…

NLP复习资料(7)-机器翻译、文本分类、情感分析

NLP复习资料国科大&#xff0c;宗老师《自然语言处理》课程复习笔记&#xff0c;个人整理&#xff0c;仅供参考。此部分为手稿&#xff0c;高清图下载见链接&#xff1a;https://download.csdn.net/download/sinat_40624829/11662412

XMl文件解析读取

DOM方式&#xff1a; http://www.w3schools.com/dom/dom_parser.asp

redis——对项目的一些优化方案

这是我们之前项目的业务流程&#xff0c;做一下简单介绍。 登录&#xff1a; 用户输入账号、密码、验证码。我们先判断用户输入的验证码是不是我们session存的验证码&#xff0c;然后去查账号密码是否正确。 如果登录成功&#xff0c;发送给用户一张凭证&#xff08;ticket&a…

const的思考

const的思考 1、什么是const?常类型是指使用类型修饰符const说明的类型&#xff0c;常类型的变量或对象的值是不能被更新的。&#xff08;当然&#xff0c;我们可以偷梁换柱进行更新&#xff1a;&#xff09;2、为什么引入const&#xff1f;const 推出的初始目的&#xff0c;正…