突破Java面试(42) - Redis & ZooKeeper两种分布式锁实现的优劣
0 Github
1 面试题
一般实现分布式锁都有哪些方式?使用redis如何设计分布式锁?使用zk来设计分布式锁可以吗?这两种分布式锁的实现方式哪种效率比较高?
2 考点分析
一般先问问你zk,然后过渡到zk关联的一些问题,比如分布式锁.
因为在分布式系统开发中,分布式锁的使用场景还是很常见的~
3 Redis分布式锁
官方叫做RedLock算法,是Redis官方支持的分布式锁算法.
这个分布式锁有3个重要的考量点
- 互斥(只能有一个客户端获取锁)
- 不能死锁
- 容错(大部分Redis节点或者这个锁就可以加可以释放)
3.1 最普通的实现方式
创建一个key
SET my:lock 随机值 NX PX 30000
- NX : 只有key不存在的时候才会设置成功
- PX 30000 : 30秒后锁自动释放。别人创建的时候如果发现已经有了就不能加锁了.
释放锁就是删除key