问题场景描述
一般都是先读数据库某个数,判断是否满足要求,然后更新这个数据,在分布式高并发的情况下,就容易出现脏读的问题。要解决的话,有以下可以尝试的方法
java同步关键字synchronized
可以锁方法也可以锁对象,不过不适合分布式环境,刚开始学完java比较容易想到的办法
利用数据库的特性
利用数据库行级锁,读锁,不过互联网的应用,这种方法就不推荐了
利用事务
这个对事务的大小,以及执行速度都有要求,如果事务足够小,执行的足够快的话,也是一种解决办法
先更新,后取数
比如:你想取得商品ID列表返回,这时候你应该先更新库存,在返回ID列表,并且更新库存的where条件应该是库存大于0,这样如果更新语句影响记录等于1,说明有足够库存,更新成功,否则库存不足。目前项目中用的这种方法
总结:
以上几点,是我们在项目中解决并发问题的思路历程,以后随着用户量的增加可能会出现新的问题,那么解决方法可能也会更新。
本文出自 “路西法” 博客,谢绝转载!
分布式并发问题解决的一些小心得,布布扣,bubuko.com
原文:http://kinnux2011.blog.51cto.com/2931162/1538440