案例-MySQL自定义排序(维护一个序号)-并发惹的祸
项目描述
本案例的设计初衷是在实际开发中的一次场景,有一个商品表,要求商品支持自定义排序,那实现思路大概是维护一个product_order字段,从1开始,自定义排序时修改商品所属顺序即可,本文分别从不同的项目架构方式来说明其实现思路,
说说问题,简单的实现思路是在插入商品之前,先查询其数据库中的最大order,该商品的order=最大order+1,这种方式是有问题的,其罪魁祸首是并发导致的线程不安全
案例中使用postman批量发送100个请求、jmeter压测工具模拟100个线程分别测试,注意,我是分开描述的,两种方式有区别,然后使用jvm锁解决其线程安全问题,之后搭建了集群环境,以同样的方式测试,其结果是集群环境jvm锁无法满足其项目所需,对于集群环境,本案例会有两种解决方案,一种是基于MySQL行级锁,一种是使用Redis分布式锁
我已经将案例步骤写个一个pdf文档,都会在压缩包中包含,里面包含基于单体架构的实现、基于MySQL行锁的实现方式、基于简单Redis分布式锁的实现方式,包括集群搭建都会有步骤
运行环境
jdk8+tomcat9+mysql5.7+IntelliJ IDEA+maven+centos8
项目技术(必填)
springboot+mybatis-plus+jmeter
数据库文件(可选)
create table t_product_info( product_id int primary key auto_increment comment '商品id', product_name varchar(50) comment '商品名', product_order int not null comment '商品序号', create_time datetime comment '创建时间' ) comment '商品表';
是否原创(转载必填原文地址)
原创
资源包文件(可选)
链接: https://pan.baidu.com/s/1tibWT-Ng3UQuZl3cYT3v9w?pwd=neq7 提取码: neq7
项目截图(必填)
运行截图(必填)
使用jmeter模拟100个并发对接口进行测试
顺序已经出现了问题,线程安全问题出现了,使用jvm锁解决后,可以保证顺序的正确性
集群架构图(来源于百度图片)
针对jvm解决后的项目搭建集群,使用jmeter对集群进行测试
使用MySQL行级锁后的集群测试
注意事项(可选)
本人所发内容及涉及源码,均为亲手所撸,如总结内容有误,欢迎指出
本项目只是一个案例,无任何项目价值,使用代码分析其线程安全问题并给出不同架构方式的解决方案,对于新手来说,有学习价值,深刻体会,必有收获,慎重下载
源码中包含单体解决方案、MySQL行级锁、Redis分布式锁解决方案源码,及详细操作笔记一份,jmeter压测工具见资源包链接
猜你喜欢
- springboot+jta+atomikos实现两阶段提交分布式事务的管理
- dubbo+zookeeper+spring boot+mybatis配置搭建分布式架构项目实例,一个服务消费,两个服务提供,负载均衡
- dubbo+spring boot+mybatis+redis分布式框架项目实例demo
- Spring整合Quartz实现分布式集群实例
- spring、springmvc、mybatis、dubbo、zookeeper简单架构分布式系统
- java开源分布式任务调度框架xxl-job支持oracle实例
- SpringMvc4.x+spring4.x+Mybatis+Maven完整整合项目实例
- springside的quickstart
- struts2的简单demo实例源代码下载
- hibernate简单demo实例源代码下载
- ssh简单的整合实例
- dwr入门hello world教程
- /
- /distributed-lock-demo
- /distributed-lock-demo/.git
- /distributed-lock-demo/.git/COMMIT_EDITMSG
- /distributed-lock-demo/.git/HEAD
- /distributed-lock-demo/.git/config
- /distributed-lock-demo/.git/description
- /distributed-lock-demo/.git/hooks
- /distributed-lock-demo/.git/hooks/applypatch-msg.sample
- /distributed-lock-demo/.git/hooks/commit-msg.sample
- /distributed-lock-demo/.gitignore
- /distributed-lock-demo/base-question
- /distributed-lock-demo/base-question/src
- /distributed-lock-demo/base-question/src/main
- /distributed-lock-demo/base-question/src/main/java
- /distributed-lock-demo/base-question/src/main/java/com
- /distributed-lock-demo/base-question/src/main/java/com/cxs
/distributed-lock-demo/base-question/src/main/java/com/cxs/BaseQuestionApplication.java
- /distributed-lock-demo/base-question/src/main/java/com/cxs/controller
- /distributed-lock-demo/base-question/src/main/java/com/cxs/mapper
- /distributed-lock-demo/base-question/src/main/java/com/cxs/model
- /distributed-lock-demo/base-question/src/main/java/com/cxs/service
- /distributed-lock-demo/base-question/src/main/java/com/cxs/service/impl
- /distributed-lock-demo/base-question/src/main/java/com/cxs
- /distributed-lock-demo/base-question/src/main/java/com
- /distributed-lock-demo/base-question/src/main/java
- /distributed-lock-demo/base-question/src/main
- /distributed-lock-demo/base-question/src
- /distributed-lock-demo/.git
- /distributed-lock-demo

- 证 Spring Boot创建自定义Banner.txt实例
- 证 Spring Boot配置@Profile注解加载不同环境的配置文件实例
- 证 Spring Boot Actuator 2.3.4.RELEASE新版本实现自定义端点信息的配置实例
- 原证 spring AOP 过滤器 拦截器 执行顺序示例
- 证 spring boot使用不指定Maven parent pom来创建可执行的spring boot项目
- 证 Spring Boot整合thymeleaf做为显示层的hello world实例
- 证 Spring Boot整合SpringFox Swagger2实现REST API增删改查项目实例
- 证 Spring Boot演示@ConfigurationProperties标注实现自定义配置属性的实例
- 证 Spring Boot整合Ehcache的简单入门实例
- 原证 springboot+sqlite3+iceEditor开发网页版记事本
- 原证精 SpringBoot+Maven+Echarts实现实时展示CPU内存硬盘性能
- 原证 Swagger的简单案例,适合初级者学习使用
