分布式锁是控制分布式系统或不同系统之间共同访问共享资源的一种锁实现,如果不同的系统或同一个系统的不同主机之间共享了某个资源时,往往需要互斥来防止彼此干扰来保证一致性
常用分布式锁实现方案
- 数据库
- Memcached(add命令)
- Redis(setnx命令)
- Zookeeper锁
Redis锁
Redis锁的基本特征
- 互斥性:在任意一个时刻,只有一个客户端持有锁
- 高性能(加、解锁时高性能)
- 可以使用阻塞锁与非阻塞锁
- 无死锁:即便持有锁的客户端崩溃或者其他意外事件,锁仍然可以被获取
- 可用性(不能出现节点down掉后加锁失败)
- 容错:只要大部分Redis节点都活着,客户端就可以获取和释放锁
- 可重入
实现原理:
SET key value NX PX milliseconds
SET key value NX EX seconds
这里一定要使用NX,因为NX表示只有key不存在时,SET才能成功
【参考资料】