在锁的实现上,我们知道有Redis分布式锁和Zookeeper锁两种方式,那么如何选择呢看下表
Redis方式 | Zookeeper方式 | |
优点 | 支持高并发且效率高 | 锁的安全行较高,因为Zookeeper可持久化,还可以实时监听获取锁的客户端状态。一旦客户端"down掉",则瞬间节点随之消失,Zookeeper因而能第一时间释放锁。不在像使用分布式缓存实现锁的那样还需要加入超时时间判断的逻辑。 |
缺点 | 如果内存大小不足,则极有可能导致缓存中的锁信息丢失. | 性能开销比较高。因为该方式需要动态创建,删除Zookeeper的临时节点,频繁操作磁盘读写来实现锁功能,这种方式不再适合直接被高并发的场景使用。 |
实现 | 直接采用Redis的分布式客户端框架Redisson,即可方便地实现分布式锁 | 直接采用Zookeeper第三方库Curator,即可方便地实现分布式锁 |
使用场景 | 适合高并发场景。但是需要注意如下3个方面的配合使用:加上超时时间避免死锁;提供足够支撑锁服务的内存空间;稳定的集群化管理. | 适合对可靠性要求非常高,同时并发程度不高的场景 |
结合自己的使用场景,我们比较清楚如何选择那种方式来实现分布式锁.