分布式锁

分布式系统中,为了保证数据一致性,常用到分布式锁。比如主从服务器,选主可通过争抢锁实现。

常用的方式:

1、基于数据库做乐观锁(比如基于版本号的字段更新)。

2、基于memcached的add()方法。

3、基于memcached的cas()方法。

4、使用redis的setnx()、expire()方法,用于分布式锁

5、使用redis的setnx()、get()、getset()方法,用于分布式锁。

6、使用redis的watch、multi、exec命令,用于分布式锁。(不常用) 

7、使用zookeeper,用于分布式锁。(不常用) 

其中,zookeeper做分布式锁:

每个客户端对某个方法加锁时,在zookeeper上的与该方法对应的指定节点的目录下,生成一个唯一的瞬时有序节点。 判断是否获取锁的方式很简单,只需要判断有序节点中序号最小的一个。 当释放锁的时候,只需将这个瞬时节点删除即可。同时,其可以避免服务宕机导致的锁无法释放,而产生的死锁问题。

相关推荐