分布式锁的几种实现方式(Java )

基于Zookeeper实现分布式锁

基于zookeeper临时有序节点可以实现的分布式锁。大致思想即为:每个客户端对某个方法加锁时,在zookeeper上的与该方法对应的指定节点的目录下,生成一个唯一的瞬时有序节点。 判断是否获取锁的方式很简单,只需要判断有序节点中序号最小的一个。 当释放锁的时候,只需将这个瞬时节点删除即可。同时,其可以避免服务宕机导致的锁无法释放,而产生的死锁问题。
可以直接使用zookeeper 第三方库Curator客户端,这个客户端中封装了一个可重入的锁服务。

基于缓存实现分布式锁

基于Redis

使用 Redis 的客户端 Redisson



   org.redisson
   redisson
   3.3.1
  



   org.redisson
   redisson
   2.8.1

Redisson Lock API:

RLock lock = redisson.getLock("anyLock");
// Most familiar locking method
lock.lock();

// Lock time-to-live support
// releases lock automatically after 10 seconds
// if unlock method not invoked
lock.lock(10, TimeUnit.SECONDS);

// Wait for 100 seconds and automatically unlock it after 10 seconds
boolean res = lock.tryLock(100, 10, TimeUnit.SECONDS);
...
lock.unlock();

基于Tair

参考资料

Curator Recipes

跟着实例学习ZooKeeper的用法: 分布式锁

《Redis官方文档》用Redis构建分布式锁

Redisson Distributed locks and synchronizers

你可能感兴趣的:(分布式锁的几种实现方式(Java ))