论坛帖子(文章)点赞功能设计_文章点赞功能设计-程序员宅基地

技术标签: java  quartz  springboot  redis  

论坛帖子(文章)点赞功能设计,采用springboot+redis+quartz来实现。
按惯例,源代码已上传:https://git.dev.tencent.com/louchengchun/giveALike.git

功能需求:如下图所描述,很明显,该需求的难点在于用户对于点赞和取消点赞状态的频繁转换操作。
        如果我们按照常规方式直接操作db,对数据库的压力很大,由此引出了redis和quartz框架的使用。

在这里插入图片描述

  实现思路:   
  1,用户的点赞(取消点赞)等信息先以map的形式保存到redis中;
  2,使用redis提供的原子性操作,对点赞数进行加1减1的操作;
  3,使用quartz框架,把redis中的数据定时更新到mysql(oracle)中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面五个截图展示了关键的实现过程。
1,定义两个redis的key。我们要采用的是redis的map结构(由key名字也可以看出)第一个用来保存我们的点赞具体信息,第二个用来保存某文章被点赞数量。
2,我们根据文章id,即artId和用户id,即userId,拼接作为map集合中key的值(示例看图二)
3,我们根据用户的点赞状态(是点赞还是取消点赞)来调用不同的方法(图三)。当用户点赞时,根据第二点,map集合中的每一个key的组成形式都是文章id在前,用户id在后,即111111_222222的形式,对应存储的值为点赞状态的标识值(1,点赞,0,取消点赞/未点赞)。这样,我们就把所有的关键信息都以键值对的形式存储了。 假如文章id为1,用户id为1,用户进行点赞操作,那么我们存储的结果为:“1_1”: “1"的形式,如果进行取消点赞操作,那结果自然为"1_1”: “0"的形式。如下图所示,这样,把用户频繁的点赞取消操作放到redis中处理。在这里插入图片描述
4,这里可以采用quartz提供的定时调度机制来定时的更新数据到关系数据库中。如果您开发框架也是springboot,那么直接让你的scheduler实现ApplicationRunner接口,重写其run方法,这样scheduler就会伴随着容器启动。
5,使用redisTemplate封装的scan,即扫描方法,遍历出map集合中所有的键值对,我们的键里面以111_222的形式封装的artId和userId,取出后以”_"标识拆开即可;而当前的值即代表点赞(取消点赞)的状态。这些信息保存到like对象中,然后把每一个like对象保存到一个list集合中返回即可。

	具体思路大体如上面所述,一些具体的实现还有一些细节的地方在代码里面也完善了,但是仍有很多不足之处。
	近期工作较忙,开头写了近一个月,正文一直没写,实在抱歉。
	后期会在现有基础上继续优化,感谢阅读,欢迎讨论!
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_35041206/article/details/94395778

智能推荐

剖析Halcon 9点标定旋转中心标定与使用_九点标定和旋转中心标定-程序员宅基地

文章浏览阅读2.1w次,点赞124次,收藏383次。主要讲解上下双相机定位贴合的原理和实现过程,包括各种标定、组合使用及具体的halcon源码实现,适用于的X、Y、Z三轴加一旋转轴系统,如模组组成的多轴系统、Scara四轴机器、六轴机器人(在运行过程中保证几个自由度不动,运行即可)一、标定介绍1.标定模型A:相机固定(夹具不旋转)夹具夹取产品或者标定块,选取一个特征,开始进行标定X轴、Y轴移动一个位置,记录轴的物理坐标:(Qx1,Qy1)提取图像中对应特征点,图像像素坐标:(Px1,Py1)运动第N位置,记录下点位轴轴坐标(Q_九点标定和旋转中心标定

Shiro 教程基于SSM(SpringMVC + Spring + Mybatis)EHCache版本-程序员宅基地

文章浏览阅读517次。一、Shiro简介Apache Shiro 是 Java 的一个安全框架。我们经常看到它被拿来和 Spring 的 Security 来对比。大部分人认为 Shiro 比 Security 要简单。我的观点赞成一半一半吧。首先 Shiro 确实和 Security 是同类型的框架,主要用来做安全,也就是我们俗称的权限校验(控制)。居多人对 Shrio 的定义为好..._shiro-ehcache 版本有哪些

如何将新手引导模块化?答案在此_新手引导开发-程序员宅基地

文章浏览阅读2.7k次,点赞3次,收藏11次。新手引导的是很复杂的,怎么从复杂的逻辑中模块化?_新手引导开发

matlab叶片背景,基于Matlab的复杂背景下叶片图像提取方法-程序员宅基地

文章浏览阅读615次。安徽农 业科学 ,Journal ot’An]mi Agl’i Sci.201 3,41(29):l 1901一l 1903 责任编辑 姜丽 责任校对 卢瑶 基 于 Matlab的复杂背景下叶片图像提取方法 齐国红,张晴晴,张云龙 (郑 IX:学阿亚 学院,郇州新郑45l150) 摘要 将需要研究的植物叶片从复杂的背景下提取出来是后期图像理解和图像分析的关键 主要是在支持 向量机的基础上将叶片从 ..._将绿色叶片从复杂背景中分割出来的代码

搭建高效、可靠、稳定的WEB服务器(Apache)_linux搭建稳定的服务器-程序员宅基地

文章浏览阅读2k次。原贴:http://blog.planevc.com/article.asp?id=411&page=5搭建高效、可靠、稳定的WEB服务器(Apache)作者:admin 日期:2007-02-02字体大小: 小 中 大

BZOJ2125 最短路 【仙人掌最短路】_一个nn个点mm条边的连通无向图,满足每条边最多属于一个环,有qq组询问,每次询问两-程序员宅基地

文章浏览阅读388次。题目给一个N个点M条边的连通无向图,满足每条边最多属于一个环,有Q组询问,每次询问两点之间的最短路径。输入格式输入的第一行包含三个整数,分别表示N和M和Q 下接M行,每行三个整数v,u,w表示一条无向边v-u,长度为w 最后Q行,每行两个整数v,u表示一组询问输出格式输出Q行,每行一个整数表示询问的答案输入样例9 10 21 2 11 4 13 4 12_一个nn个点mm条边的连通无向图,满足每条边最多属于一个环,有qq组询问,每次询问两

随便推点

delphi mysql变体类型_从Delphi到Go——函数的可变参数-程序员宅基地

文章浏览阅读124次。Delphi事实上,Delphi并没有什么可以直接为函数传递可变参数(数量可变、类型可变)的语法,但是并不是说不可能实现,最常用的Format()函数就是最好的例子。虽然不能直接传递可变参数,但是通过一种叫做可变类型的开放数组即可实现为函数传递数量不定、类型不一的可变参数。可变类型可变类型不是变体类型,而是一个记录类型TVarRec,在System单元中的定义如下:TVarRec = record..._delphi array of const vunicodestring

zsh: command not found: python问题解决-程序员宅基地

文章标题:zsh: command not found: python问题解决 摘要:本文讨论了在mac电脑上出现 zsh: command not found: python 的问题,分析了出现该问题的原因是未配置python环境,提出了解决方案是通过Homebrew安装Python来解决该问题。

如何获取硬盘序列号-程序员宅基地

文章浏览阅读767次。如何获取硬盘序列号?作者:cg1摘自:access911.net编辑:cg1更新日期:2003-8-2浏览人次: 2255专题地址:[url]http://www.access911.net/?kbid;77FAB01E10DC[/url]简述:如何获取硬盘序列号?阅读前需掌握:难度等级:等级未评定..._vb deviceiocontrol dfp_receive_drive_data scsi

LSTM多变量多步时间序列预测_lstm多变量时序预测预测新值-程序员宅基地

文章浏览阅读213次。在时间序列预测中,我们常常需要考虑多个相关变量的影响,并预测未来多个时间步的取值。本文将介绍如何使用LSTM实现多变量输入的多步时间序列预测,并提供相应的源代码。假设我们有多个相关变量作为输入特征,并且需要预测未来多个时间步的取值。通过以上步骤,我们可以使用LSTM模型实现多变量输入的多步时间序列预测。使用验证集对训练好的模型进行验证,评估模型的性能。训练集用于模型的训练,验证集用于调整模型的超参数,测试集用于评估模型的性能。将测试集输入到训练好的模型中,得到未来多个时间步的预测结果。_lstm多变量时序预测预测新值

配置文件、API接口脱敏_api脱敏-程序员宅基地

文章浏览阅读2.1k次。核心隐私数据无论对于企业还是用户来说尤其重要,因此要想办法杜绝各种隐私数据的泄漏。对于工程中的敏感信息,与数据库打交道的的工程肯定是配置数据源,尤其是数据库的账号密码,我们不想把它们明文写在配置文件里,又想让工程能正确跑起来,那应该怎么做呢?**由于数据库的敏感性,所以不可能让每个人都知道su ****root的密码。且数据库中权限、视图这些机制也是为了保证安全性,所以要保证让尽可能少的人知道root**的密码。在工程的配置文件中写入加密好的密文。启动工程时让知道密钥的人,以启动参数的形式将密钥。_api脱敏

EasyPoi 导出表格并设置表头_easypoi增加标头-程序员宅基地

文章浏览阅读7.5k次。EasyPoi 导出表格EasyPoiUtil 工具类设置表头 NewExcelExportStylerDefaultImpl 工具类VO实体类 对应的是表的列名Controller 1 未设置表头版本Controller 2 设置表头版本Service 查询导出Excel人员数据ServiceImplMapperMapper.xmlEasyPoiUtil 工具类package com.h..._easypoi增加标头

推荐文章

热门文章

相关标签