多线程环境下怎样保证数据库一致性

如果你采用Mysql且不是分布式的数据库,大可不必想太多。数据库本身就是有相应机制的,比如行锁,你在修改某一行的时候将会锁定这行的数据,不可对他再进行读写,你在读取某一行的时候,不可对他进行写操作,这都是数据库实现好的。所以此种情况下多线程环境下如何保证数据库一致性只需要考虑代码中的并发场景问题,不要出现多个线程同时修改一条数据并且不错并发保护就好了 比如游戏服务器中的战斗剩余次数的修改,战斗剩余次数-1 一定要在战斗结束之前操作,如果在战斗结束之后-1,那么此时玩家可能在剩余次数事实为0的时候,再次发起战斗(因为战斗已经结束,战斗标识表示可以再次发起战斗,且此时若-1操作由于网络原因还没执行,又来了一次战斗发起,战斗剩余次数验证失效,又开启一次战斗),-1操作还没有完成,就会有可能出现执行两次-1,这时就会出现你说的并发问题,战斗剩余次数变成了-1,也可以理解为我们的战斗开始验证,战斗开始,战斗计算,战斗结算,战斗修改相关数据,战斗结束是一个逻辑上的事务,这可以说是你想知道的一个场景了。这是我曾经遇到过的一个并发场景,确实出现了挑战次数-1 的情况
■网友
如果不是分布式,可使用锁机制,根据你的业务场景,选择合适的锁。比较单一的系统,乐观锁就可以了
■网友
事务处理机制+threadlocal
■网友
崇尚最终一致


    推荐阅读