分布式锁解决方案实战
1 为什么要学习分布式锁解决方案
为了解决分布式架构带来的数据准确性问题!
我们用synchronized或者 ReentrantLock 能解决问题吗?
真实生产环境我们采用集群的方式去访问秒杀商品(nginx为我们做了负载均衡)。就会看到数据不一致的现象。如synchronized关键字的作用域其实是一个服务器进程(其实就是当前项目进程),在这个进程下面的所有线程都能够进行加锁。但是多进程就不行了。对于秒杀商品来说,这个值是固定的但是每个地区都可能有一台服务器。这样不同地区服务器不一样,地址不一样,进程也不一样。因此synchronized无法保证数据的一致性,这也是为什么要学习分布式解决方案的原因.
2 分布式锁需要满足的几点
1.互斥;任何时刻只能有一个client获取锁。
2.释放死锁;即使锁定资源的服务崩溃或者分区,仍然能释放锁,防止死锁。
3.容错性;只要多数节点(一半以上)在使用,Client就可以获取和释放锁。
4.确保客户端只能解锁自己持有的锁。
5.具备可重入特性。
3 synchronized锁在分布式情况下案例
面我们提到synchronized不能保证分布式架构部署下数据的准确性问题,接下来我