seata的at模式的脏读脏写问题解决
时间: 2023-06-19 11:08:36 浏览: 333
Seata的分布式事务AT模式和TCC模式实现
Seata的AT模式是通过在分布式事务中对数据库进行悲观锁的方式来保证数据的一致性。在AT模式中,当一个事务需要读取数据时,它会首先对该数据进行加锁,防止其他并发事务对该数据进行修改。当事务提交时,它会释放加锁,其他事务便可以继续读取和修改该数据。
然而,在AT模式中,由于事务之间是相互独立的,如果一个事务在读取数据时被另一个事务修改了,那么这个事务就会读取到"脏数据",导致数据不一致。这就是所谓的"脏读"问题。
为了解决这个问题,Seata引入了undo_log机制。在AT模式中,当一个事务对数据库进行修改时,Seata会将这个修改操作记录在undo_log表中。如果另一个事务在读取这个数据时,发现它被修改了,Seata会使用undo_log中记录的操作将数据回滚到之前的状态,然后再读取数据,保证了数据的一致性。
同样地,对于"脏写"问题,Seata也是通过undo_log机制来解决的。当一个事务需要修改数据时,Seata会将这个修改操作记录在undo_log表中。如果另一个事务也要修改同一条数据,Seata会检查undo_log中是否有记录,如果有,就说明这个数据已经被修改过了,Seata会回滚当前事务的操作,保证了数据的一致性。
阅读全文