一、Redis实现分布式锁
1、使用Redis分布式锁的原因:Redis性能好;命令支持比较好,实现方便。
2、实现方式:直接用int setnx写key,如果成功了,说明获取锁成功,否则拿锁失败。拿锁成功之后对key设置超时时间,操作完成时可通过del key释放锁。
二、Zookeeper实现分布式锁
1、通过创建zk的znode节点进行控制。检查zookeeper集群下的这个节点是否存在存在证明已经有锁了,不存在就没有。
Redis分布式锁:必须使用者自己间隔时间轮询去尝试加锁,当锁被释放后,存在多线程去争抢锁,并且可能每次间隔时间去尝试锁的时候,都不成功,对性能浪费很大。
Zookeeper分布锁:首先创建加锁标志文件,如果需要等待其他锁,则添加监听后等待通知或者超时,当有锁释放,无须争抢,按照节点顺序,依次通知使用者。
redis锁效率更高?