高并发处理小计

场景-下单买东西

1)第一步:首先判断账户余额是否够,够则扣款

2)第二部:生成订单

1),2)两部通过事务进行控制,事务隔离界别是:READ COMMITTED

高并发现象

如果前端未加上请求后遮罩效果(未回应不给点击),当服务器代码刚更新的时候(服务器会有几秒钟的延迟响应),用户点击按钮,服务器无法快速响应,这个时候用户就可以多次点击下单按钮。

当服务器回复相应后,就会出现高并发请求问题。出现的现象是,多个线程第一步都执行了,余额只被扣了一次,订单则生成了多个。

解决方案

1)方案1:给第一步代码加上lock,只允许一个请求线程进入,其它请求线程必须排队等待,出现的现象是,多次点击,会生成多个订单,余额扣除和订单生成数据是一致的。

2)方案2:将事务的隔离级别设置为SERIALIZABLE,出现的现象是,多次点击,只会生成一个订单,只会成功一个请求,其它线程会因为隔离级别问题导致请求错误。

3)方案3:给前端请求加上遮罩效果,如果一个请求未回应,不允许多次点击发送请求,方案3可以和方案1或方案2配合一起使用。前后端一起控制。

有问题欢迎指正。

  

猜你喜欢

转载自www.cnblogs.com/feihusurfer/p/12147997.html
今日推荐