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,一经查实,立即删除!

相关文章

大数据学习(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 流计算…

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…

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

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

Java开发需要知道的HTML知识

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

处理机调度与死锁

处理机调度与死锁 处理机调度的层次 高级调度 高级调度又称为作业调度或长程调度&#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

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

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

深度模型压缩论文(02)- BlockSwap: Fisher-guided Block Substitution for Network Compression

文章目录1.摘要和背景1.1 摘要1.2 背景2.方法和贡献2.1 方法2.2 贡献3.实验和结果3.1 实验3.2 结果4.总结和展望4.1 总结4.2 展望本系列是在阅读深度神经网络模型小型化方面论文时的笔记&#xff01;内容大部分从论文中摘取&#xff0c;也会有部分自己理解&#xff0c;有错误的…

深度模型压缩论文(01)- Meta Filter Pruning to Accelerate Deep Convolutional Neural Networks

文章目录1.摘要和介绍1.1摘要部分2.背景和方法2.1 背景2.2 贡献2.3 方法3.实验和结果3.1 实验3.2 结果4.总结和展望4.1 总结4.2 展望本系列是在阅读深度神经网络模型小型化方面论文时的笔记&#xff01;内容大部分从论文中摘取&#xff0c;也会有部分自己理解&#xff0c;有错误…

深度模型压缩论文(03)- Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self

文章目录1.摘要和背景1.1 摘要1.2 背景2.方法和贡献2.1 方法2.1.1 训练过程2.1.2 loss介绍2.2 贡献3.实验和结果3.1 实验3.2 结果4.总结和展望4.1 总结4.2 展望主要贡献&#xff1a;基于网络蒸馏方法&#xff0c;提出了一种提升裁剪后模型的精度的方法&#xff01;将训练时间大…

关系数据库——基础

数据库系统概论 四个基本概念 数据&#xff1a;数据库中存储的基本对象&#xff0c;描述一个事物的符号记录&#xff0c;数据和其语义不可分开说 数据库&#xff08;DB&#xff09;&#xff1a;是长期储存在计算机内、有组织的、可共享的大量数据的集合。 数据库管理系统&a…

Python(27)-模块

模块、包1.模块导入的方式2.使用as给模块取一个别名&#xff08;大驼峰命名法&#xff09;3.从模块中导入部分工具4.从模块中导入全部工具5.模块搜索顺序6__name__7.包8.发布模块、安装模块、卸载包9.pip安装第三方模块本系列博文来自学习《Python基础视频教程》笔记整理&#…

如何使用docker配置深度学习开发环境

文章目录1.底层驱动的安装1.1 操作系统的安装1.2 显卡驱动的安装1.3 cuda的安装2.使用docker配置深度学习开发环境2.1 docker的安装2.2 nvidia_docker的安装2.3 安装过程中的问题2.3.1 docker和nvidia_docker的版本不匹配的问题。2.3.2 解决每次运行docker命令的时候要加sudo.2…

反射全解

反射的概念 反射的引入&#xff1a; Object obj new Student(); 若程序运行时接收到外部传入的一个对象&#xff0c;该对象的编译类型是Object&#xff0c;但程序又需要调用该对象运行类型的方法&#xff1a; 1.若编译和运行类型都知道&#xff0c;使用 instanceof判断后&…

CRegKey 注册表操作

1.简介 CRegKey提供了对系统注册表的操作方法&#xff0c;通过CRegKey类&#xff0c;可以方便的打开注册表的某个分支或子键&#xff08;CRegKey::Open&#xff09;&#xff0c;可以方便的修改一个键的键值&#xff08;CRegKey::SetValue&#xff09;&#xff0c;也可以查询某…

进程基础

进程的基本概念 程序顺序执行的特征&#xff1a; 1&#xff09;顺序性&#xff1a;处理机严格按照程序所规定的顺序执行&#xff0c;每一步操作必须在下一步操作开始前执行 2&#xff09;封闭性&#xff1a;程序在封闭的环境下运行&#xff0c;程序独占资源&#xff0c;资源的状…

用Docker容器自带的tensorflow serving部署模型对外服务

相信很多人和我一样&#xff0c;在试图安装tensorflow serving的时候&#xff0c;翻遍了网上的博客和官网文档&#xff0c;安装都是以失败而告终&#xff0c;我也是一样&#xff0c;这个问题折磨了我两个星期之久&#xff0c;都快放弃了。幸运的是在同事的建议下&#xff0c;我…

C资源

云风最近写了一篇博客《C语言的前世今生》。作为长期使用C语言开发网络游戏服务器的程序员&#xff0c;云风是有理由写这样一篇文字&#xff0c;不过还是感觉谈的不够深入&#xff0c;C语言在业界使用的现状没有怎么描写&#xff0c;有些意犹未尽。在这里想比较系统的谈谈个人对…