高并发下数据库插入常见的问题

简介: 高并发下数据库插入常见的问题
01 原文出处

原文链接:https://blog.csdn.net/eson_15/article/details/84504059(版权声明:为CSDN博主「eson_15」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。)

02 总结

分析代码:

@Service
public class UserServiceImpl implements UserService {
   @Resource
   private UserMapper userMapper;
   @Override
   @Transactional(rollbackFor = Exception.class)
   public synchronized void isertUser(User user) {
       try {
           // 插入用户信息
           userMapper.insertUser(user);
           // 手动抛出异常
           throw new SQLException("数据库异常");
       } catch (Exception e) {
           // 异常处理逻辑
       }
   }
}

问题:

1.Spring Boot 默认事务回滚前提:遇到运行异常(RuntimeException)和程序错误(Error)。如果是抛出其它的异常,事务不会回滚。

2.由于事务是AOP设计的,不能在方法里面直接try…catch,这样会导致异常被 “吃” 掉,事务无法回滚。

3.同一方法中,使用同步修饰方法(锁)以及事务注解,由于AOP的原因,事务的控制范围比锁还大,锁是无效的,如上面的实例代码。


解决方案:

  • 调用Service方法之前,使用锁,使锁的范围比事务大(分布式锁或其它)
目录
相关文章
|
25天前
|
关系型数据库 MySQL 数据库连接
Python+SQLite数据库实现服务端高并发写入
Python中使用SQLite内存模式实现高并发写入:创建内存数据库连接,建立表格,通过多线程并发写入数据。虽然能避免数据竞争,但由于SQLite内存模式采用锁机制,可能在高并发时引发性能瓶颈。若需更高性能,可选择MySQL或PostgreSQL。
33 0
|
4月前
|
存储 缓存 数据库
云数据库如何处理高并发和大数据量的情况?
云数据库如何处理高并发和大数据量的情况?
48 0
|
5月前
|
算法 NoSQL Java
2023年阿里高频Java面试题:分布式+中间件+高并发+算法+数据库
又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯.....)
|
8月前
|
关系型数据库 MySQL Shell
Mysql数据库平滑扩容解决高并发和大数据量问题 3
Mysql数据库平滑扩容解决高并发和大数据量问题
58 1
|
8月前
|
关系型数据库 MySQL Java
Mysql数据库平滑扩容解决高并发和大数据量问题 2
Mysql数据库平滑扩容解决高并发和大数据量问题
58 0
|
8月前
|
canal 关系型数据库 MySQL
Mysql数据库平滑扩容解决高并发和大数据量问题 1
Mysql数据库平滑扩容解决高并发和大数据量问题
146 0
|
9月前
|
缓存 NoSQL 应用服务中间件
高并发场景下的redis缓存和数据库双写不一致问题分析与解决方案设计
高并发场景下的redis缓存和数据库双写不一致问题分析与解决方案设计
|
9月前
|
算法 NoSQL Java
2023年阿里高频Java面试题:分布式+中间件+高并发+算法+数据库
又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯.....)
|
9月前
|
算法 NoSQL Java
2021年阿里高频Java面试题:分布式+中间件+高并发+算法+数据库
又到了一年一度的金九银十,互联网行业竞争是一年比一年严峻,作为工程师的我们唯有不停地学习,不断的提升自己才能保证自己的核心竞争力从而拿到更好的薪水,进入心仪的企业(阿里、字节、美团、腾讯.....)
|
9月前
|
关系型数据库 测试技术 分布式数据库
PolarDB | PostgreSQL 高并发队列处理业务的数据库性能优化实践
在电商业务中可能涉及这样的场景, 由于有上下游关系的存在, 1、用户下单后, 上下游厂商会在自己系统中生成一笔订单记录并反馈给对方, 2、在收到反馈订单后, 本地会先缓存反馈的订单记录队列, 3、然后后台再从缓存取出订单并进行处理. 如果是高并发的处理, 因为大家都按一个顺序获取, 容易产生热点, 可能遇到取出队列遇到锁冲突瓶颈、IO扫描浪费、CPU计算浪费的瓶颈. 以及在清除已处理订单后, 索引版本未及时清理导致的回表版本判断带来的IO浪费和CPU运算浪费瓶颈等. 本文将给出“队列处理业务的数据库性能优化”优化方法和demo演示. 性能提升10到20倍.
601 4