接口并行并发稳定安全策略

目录

 

接口并行并发稳定安全策略

1、数据库-行级排他锁(写锁)

2、redis分布式锁   或者第三方分布式锁

3、数据库加唯一约束


接口并行并发稳定安全策略

一个jvm时:

1、使用java中的Lock加锁

2、synchronized 重量锁

注:Lock和synchronized只能在一个jvm中起效,如果集群部署,在多个JVM中就会造成无锁模式


多个jvm时:

1、数据库-行级排他锁(写锁)

[注意行级锁不像表级锁,不会发生死锁的问题,因为行级锁的颗粒度是最小的,跟其他锁相比最容易造成死锁]

(1) select * from t_order where order_id = trade_no for update;

逻辑...

(2) 提交事务

缺点:

     如果业务处理比较耗时,并发情况下,后面线程会长期处于等待状态,占用了很多线程,让这些线程处于无效等待状态,我们的web服务中的线程数量一般都是有限的,如果大量线程由于获取for update锁处于等待状态,不利于系统并发操作。

解决:同样利用

排他锁 (行级写锁)update

执行成功返回的行数来确定是否要更新数据状态

扩展一下:除了for update外,insert,update,delete自带排他锁,select普通查询默认不加任何锁类型

2、redis分布式锁   或者第三方分布式锁

1)、锁信息必须是会过期超时的,不能让一个线程长期占有一个锁而导致死锁;

2)、同一时刻只能有一个线程获取到锁。

3、数据库加唯一约束

UNIQUE KEY `a_1` (`ref_type`,`ref_id`) COMMENT '保证业务唯一性'

说明:对于任何一个业务,有一个业务类型(ref_type),业务有一个全局唯一的订单号,业务来的时候,

先查询t_uq_dipose表中是否存在相关记录,若不存在,继续放行。

猜你喜欢

转载自blog.csdn.net/weixin_38316697/article/details/107106827
今日推荐