什么叫中等并发?不是高并发,不是低并发
并发度 | 说明 | 举🌰 | 典型方案 |
---|---|---|---|
高并发 | 短时间内的大量并发冲突 | 秒杀活动 | redis缓存 + 串行化 + 异步 |
低并发 | TPS很低。基本没有并发冲突 | 后台配置系统 | 不需要处理/悲观锁/乐观锁 |
中并发 | TPS比较平均,且有一定的并发冲突。 | 一般性的事务性系统。订单,库存,支付 | 下面详细介绍 |
并发需要解决的两大问题:
-
竞态条件
并发策略
策略 | 举🌰 | 并发度 |
---|---|---|
带边界更新 | update inventory set stock = stock - 1 where stock > 0 | **** |
CAS | update order set status = 'confirmed' where status = 'init' | *** |
版本号 | update user set age = 18, version = version + 1 where version = ? | ** |
悲观锁 | select for update/update/delete | * |
-
幂等
幂等策略
场景 | 策略 | 举🌰 |
---|---|---|
插入幂等 | 检测duplicated key冲突 | unique key(ordersn); insert into order(ordersn, ...) values ('SNXXX1', ...) |
删除幂等 | 天然幂等 | delete from order where ordersn = 1 |
更新幂等 | 更新失败后检测值 | update order set status = 'confirmd' where status = 'init'; if updated = 0; select status from order; if status = 'confirmed' return true |
更新幂等 | 带外部流水号,插入日志表,检测duplicated key冲突 | insert into order_action(sequence, ...) values('流水号',...); update order set status = 'confirmd' where status = 'init'; |