在分布式场景下,为了解决事务冲突,常用的方法有:
分布式锁: 使用分布式锁可以保证同一时刻只有一个事务在执行,从而避免事务冲突。可以使用数据库锁、缓存锁等技术实现分布式锁。
乐观锁: 使用乐观锁的方法是在事务执行前将数据版本号(version)加1,并在事务执行时带上版本号进行判断。如果版本号不匹配,说明数据在事务执行期间被其他事务修改,此时事务执行失败。
悲观锁: 悲观锁是在事务开始时将数据加锁,保证其他事务无法访问该数据,直到事务结束释放锁。常见的悲观锁有行锁、表锁等。
下面是一个使用乐观锁的 Java 代码示例:
``` public void updateData(int id, int newValue) { Data data = getDataById(id); // 获取数据 data.setValue(newValue); // 修改数据值 data.setVersion(data.getVersion() + 1); // 修改版本号 updateDataToDb(data); // 更新数据到数据库 }
public void updateDataToDb(Data data) { String sql = "update data set value = ?, version = ? where id = ? and version = ?"; int rows = jdbcTemplate.update(sql, data.getValue(), data.getVersion(), data.getId(), data.getVersion() - 1); if (rows == 0) { throw new OptimisticLockingException("数据已被修改,请重