分布式锁使用场景
现在的系统都是集群部署,每个服务都不是单节点的了。比如库存服务,可能部署到3台机器上分别命名为节点1,节点2,节点3。库存服务需要扣减库存,扣减库存肯定需要锁吧,如果使用Lock
或者synchronized
,只能锁住自己的节点。而从前台访问是随机路由到这3台节点的。如果线程一进来使节点1上了锁,当线程二进来可能访问到的是节点2,这时节点2还没有上锁,那么库存就会扣减错误。而库存扣减还是一个核心操作,现在居然有Bug,想想就可怕。
这时我们就需要一个全局的锁了。
实现全局的锁不一定是Redis。MySQL,Zookeeper也可设计为分布式锁。本篇主要讲的是Redis分布式锁的实现方式,其他的实现方式不做讲解。MySQL用作分布式锁在性能上并不好,这里不建议使用。对Zookeeper分布式锁有兴趣的可以看看我写的这篇文章。
“