设计分布式锁要注意的问题

分布式锁应该具备的条件:

1、在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行;
2、高可用的获取锁与释放锁;
3、高性能的获取锁与释放锁;
4、具备可重入特性;
5、具备锁失效机制,防止死锁;
6、具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败。

实现方式(方案):
1、基于数据库(mysql,sqlserver等)
2、基于redis
3、基于zookeeper

方案比较:

1、从理解的难易程度角度(从低到高)
数据库 > 缓存 > Zookeeper
2、从实现的复杂性角度(从低到高)
Zookeeper >= 缓存 > 数据库
3、从性能角度(从高到低)
缓存 > Zookeeper >= 数据库
4、从可靠性角度(从高到低)
Zookeeper > 缓存 > 数据库