论坛帖子(文章)点赞功能设计,采用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集合中返回即可。

 具体思路大体如上面所述,一些具体的实现还有一些细节的地方在代码里面也完善了,但是仍有很多不足之处。近期工作较忙,开头写了近一个月,正文一直没写,实在抱歉。后期会在现有基础上继续优化,感谢阅读,欢迎讨论!

论坛帖子(文章)点赞功能设计相关推荐

  1. 微博评论点赞mysql设计_微博点赞功能设计得是否合理?

    在微博上时不时就有人出来道歉,点赞了什么文章或者某某某的微博,接踵而来的便各种网友或者粉丝的口诛笔伐.这几天又发生了一起.在此不讨论点赞的文章或者点赞微博的内容,我们来讨论一下微博点赞功能的合理性. ...

  2. python爬虫之汽车之家论坛帖子内容爬取

    Datawhale爬虫 第五期 Day7 实战项目:汽车之家车型论坛帖子信息 作为国内目前第一大汽车论坛,反爬虫很恶心,中间很多坑. 新手,第一次搞这么复杂的爬虫,前期没有排查,都是遇到坑的时候再返回 ...

  3. Xilinx 官方论坛帖子、AR记录

    文章目录 论坛帖子 core_generation_info属性的用途 Tips for SDK C++ projects using C source files MIG IP核中不勾选XADC对D ...

  4. scrapy 爬取论坛帖子名称及链接(递归方式获取)

    本文主要爬取西安论坛帖子,如果要爬取内容及评论热度等可以再深入爬取 首先建立spider xi'an,命令 scrapy genspider xian ixian.com xian.py内容: imp ...

  5. MySQL存储用户点赞的信息_基于redis实现的点赞功能设计

    点赞是我们现在经常见到的一个效果,如朋友圈.微博都有点赞的效果,下面这篇文章主要跟大家分享了基于 redis实现的点赞功能设计思路的相关资料,文中介绍的非常详细,对大家实现点赞功能具有一定的参考学习价 ...

  6. redis系列:通过文章点赞排名案例学习sortedset命令

    前言 这一篇文章将讲述Redis中的sortedset类型命令,同样也是通过demo来讲述,其他部分这里就不在赘述了. 项目Github地址:https://github.com/rainbowda/ ...

  7. 动网论坛帖子跟帖展开/关闭测试

    看到动网论坛帖子列表里在用,就把它挖出来,核心是用浮动框架iframe来显示或隐藏跟帖列表. 共有3个文件和4个图片 在线演示:http://music.lzr.com.cn/apple/test/ ...

  8. 这是一篇来源于阿里内部技术论坛的文章

    这是一篇来源于阿里内部技术论坛的文章,原文在阿里内部获得一致好评.作者已经把这篇文章开放到云栖社区中供外网访问.Hollis对文章内容做了部分删减,主要删减掉了其中只有阿里内部才能使用的工具的介绍,并 ...

  9. WordPress 文章点赞

    Installation 上传 wp-zan目录 到 /wp-content/plugins/ 目录 在后台插件菜单激活该插件 添加 <?php wp_zan();?> 到需要的位置 De ...

最新文章

  1. AngularJS2.0 教程系列(一)
  2. 2015.11.3 RichBox改变若干文本颜色
  3. 使用WebDriver + Java + Junit做自动化测试教程
  4. emacs Linux Java编程环境_Linux下搭建用emacs查看代码的开发环境
  5. 原生JS实现异步图片上传(预览)
  6. mysql怎么实现事务序列化_MySQL 架构 - 事务处理
  7. androidx使用FileProvider适配安卓7
  8. 信息系统项目管理师:论项目的质量管理
  9. php yii框架源码,yii 源码解读
  10. NOI.AC-保镖【贪心,对顶堆】
  11. 关于VC6.0一些常见问题和解决方案
  12. 超好用的网页浮动广告代码
  13. 软件工程专业的论文答辩_软件工程专业本科毕业答辩?
  14. AltiumDesigner16安装教程
  15. 网易buff服务器不稳定,《梦幻西游》手游平民94方寸逆袭成神分享心得助你腾飞_ 《梦幻西游》手游官网-人人都玩,无处不在...
  16. C/C++外部链接、内部链接
  17. 使用pytest 出现collected 0 items解决
  18. 三相SVPWM逆变器MATLAB仿真实验,三相SVPWM逆变电路MATLAB仿真
  19. 【PM模块】预防性维护
  20. Python办公自动化Excel

热门文章

  1. 通达信接口的定义和实现
  2. python中,__del__方法介绍
  3. 拼多多2019秋招内推笔试-业务平台开发
  4. 高管股权激励的最优设计方案
  5. 16周监考---期末考试...
  6. 基于“树莓派+腾讯云”的在线甲醛监测系统
  7. 数据结构实验PTA 7-10 旅游规划 分数 25
  8. 2022年证券从业资格证券市场基本法律法规考试每日一练及答案
  9. 如何设计一个成功的网站
  10. 伪类和伪元素的区别及使用场景