分步式锁 是一种跨进程,跨jvm的互斥锁,它保证多个机器节点对共享资源访问的的顺序性
redission基本原理
RLock底层使用Redis的Hash作为存储结构,其中Hash的key用于存储锁的名字,Hash的filed用于存储客户端id,filed对应的value是线程重入次数。
Redisson中客户端1一旦加锁成功,就会启动一个watch dog看门狗,他是一个后台线程,会每隔10秒检查一下,如果客户端1还持有锁key,那么就会不断的延长锁key的生存时间。
市面上的分布式锁有4种:
1,基于mysql的锁实现 常见的悲观锁for update,以及它是基于 CAS 思想实现的用版本号加锁
2,基于redis锁实现
有一下几种实现方式:
1,setnx+过期时间 ,突然宕机了。这种情况锁将会无法主动释放。
2,用lua脚本实现的Redission ,底层用redis的hash数据结构,有一个机制是一旦l加锁成 功, 就会启动一个watch dog看门狗,每隔10秒检查一下,会对锁进行续期。
和Zookeeper相比较,Redisson基于Redis性能更高,适合对性能要求高的场景。
缺点:Redisson没有办法解决节点宕机问题,不能达到ZK的一致性;