本质是如何存储/释放锁.
- 基于数据库实现分布式锁,这里的数据库指的是关系型数据库;
- 唯一性约束
- 加锁: 添加记录
- 释放: 删除记录
- 基于缓存实现分布式锁;
- Redis:
setnx
, 队列用于维护顺序
- Redis:
- 基于 ZooKeeper 实现分布式锁。基于数据库实现分布式锁 (首选)
- 解决基于分布式的问题
对比
总结
注意
1 .redis 不用通过超时来释放锁,DEL操作可以直接释放不用等到超时
2. redis 官方已经明确说明不推荐 setnx 来实现分布式锁了(https://redis.io/commands/setnx) 官方给出了 the Redlock algorithm 各语言的实现版本是来实现分布式锁的机制,比如JAVA的实现版本(https://github.com/redisson/redisson) 所以从可靠性来讲并不比zk的方案差
分布式互斥是在分布式系统中存在多个节点共享某个资源或临界区,任何时刻只允许一个进程访问资源或执行临界区,而分布式锁正好是解决分布式互斥的一种方法。