关于项目点赞问题的高并发解决

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介: 采用的技术方案是redis解决的

一开始我们都是直接存入mysql

设计数据库表的时候 由于我们的点赞是打算独立系统

所以不跟别的业务表相耦合

所以设计了一个中间表

后面发现高并发的问题先不说 更多的是无效更新

所以我们打算把点赞数据存在缓存中进行更新

然后再定时推送到mysql中进行一个总数更新

缓存我们最先想到的是redis

所以选定redis后就是确定数据结构


很明显 我们的key一定要是业务id 但是业务id我们这里就是对应别的表的主键 比如问题表 课程表

在同一个表中雪花算法一般我们不考虑会重复的问题

但是我们这里有多种类型

所以我们的key决定由 业务的bizid跟bizType组成 这就默认不会重复了

那么value很明显 就是要跟用户相关 所以value 就是用户id

那么用户会取消点赞 所以我们如果用常规的集合 就会存在无效数据

所以我们用set就可以  在set的设置key 存在会返回0 0代表的就是false

所以流程就很清晰了

用户进来的时候 直接设置key 如果返回1那么就是设置成功没来签到

如果设置key失败 说明就是取消点赞 那么删除缓存即可

那么 用户的解决了 我们还要解决的一个点是总数 likedTimes的问题

那么同样考虑数据结构的问题

数据结构很明显

肯定要类似   bizType  开头 一个bizType又有很多个bizId  bizid 有对应自己的点赞总数 likedTimes

所以第一个到的就是hash

但是hash会有个问题

就是我们多线程高并发的时候

设置值的时候

会跟别的线程出现串行的情况



所以我们需要再拿出来的时候 马上把这个数据删除 就可以了

所以zset有个pop 弹栈 弹出来就没了

为什么要弹min开始

就是因为数据量越小用户越敏感

整体思路就是这样

另外的优化思路还有

其他微服务主动感知点赞系统 有变化进行更新 缺点 业务耦合 没理由感知其他微服务的

不依赖mq  完全依赖定时任务   缺点 时间不好判断

伪装成mysql的从节点 要利用canal技术

读取binlog进行同步

缺点就是 又是中间件 加大mysql的压力了

总结 不要为了优化去优化 想想坏的 比如redis不稳定

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
缓存 Java 应用服务中间件
【高并发优化手段】基于Springboot项目(二)
【高并发优化手段】基于Springboot项目
1657 0
|
存储 Java Linux
【高并发内存池】第一篇 项目简介及定长内存池
【高并发内存池】第一篇 项目简介及定长内存池
376 0
|
数据采集 资源调度 JavaScript
Node.js 适合做高并发、I/O密集型项目、轻量级实时应用、前端构建工具、命令行工具以及网络爬虫和数据处理等项目
【8月更文挑战第4天】Node.js 适合做高并发、I/O密集型项目、轻量级实时应用、前端构建工具、命令行工具以及网络爬虫和数据处理等项目
395 5
|
前端开发 Java 关系型数据库
【保姆级SSM教程】高并发朋友圈点赞项目设计
【保姆级SSM教程】高并发朋友圈点赞项目设计
297 0
|
缓存 Java 程序员
【项目日记(一)】高并发内存池项目介绍
【项目日记(一)】高并发内存池项目介绍
【项目日记(一)】高并发内存池项目介绍
|
缓存 负载均衡 Oracle
面试官:说下你在项目中是如何处理高并发的???
面试官:说下你在项目中是如何处理高并发的???
657 0
面试官:说下你在项目中是如何处理高并发的???
|
NoSQL Java 数据库
【三十】springboot项目上高并发解决示例
【三十】springboot项目上高并发解决示例
1079 3
|
SQL 缓存 负载均衡
项目高并发问题解决方案合集
这道题是比较典型的题吧,也是我第一个公司入职的时候,面试官问我的,当时我回答只能说是星星之火,还不能燎原那种,差点被面试官给浇灭。
423 0
|
缓存 网络协议 Java
【高并发优化手段】基于Springboot项目(一)
【高并发优化手段】基于Springboot项目
1469 0
|
缓存 监控 容灾
0-1设计高可用、高并发、高伸缩的分布式项目架构
0-1设计高可用、高并发、高伸缩的分布式项目架构
324 0

热门文章

最新文章