基于Redis实现分布式锁思路
1.获取锁
多个不同的jvm 同时创建一个相同的标记使用Setnx命令,因为Rediskey必须保证是唯一的,只要谁能够创建成功谁就能够获取锁
Set命令的时候:如果key不存在则创建,如果key已经存在则修改原值;
SetNx命令: 如果key不存在则创建 返回1,如果已经存在则不执行任何操作返回0
1 不存在创建成功 0 已经存在 不执行任何操作。
2.释放锁
对我们的redis的key设置一个有效期(或者是主动删除该key)可以灵活的自动的释放该全局唯一的标记,其他的jvm重新进入到获取锁资源。
3.超时锁(没有获取锁、已经获取锁)
等待获取锁的超时时间
已经获取到锁 锁的有效期 5s
分析基于Zk实现分布式锁思路
1.获取锁
多个不同的jvm在zk集群上创建一个相同的全局唯一的临时路径,只要谁能够创建成功谁就能够获取到锁。
分析:临时节点对我们节点设置有效期
2.释放锁
人为主动删除该节点或者使用Session有效期
3.超时锁(没有获取锁、已经获取锁)
等待获取锁的超时时间
已经获取到锁 锁的有效期 5s
Redis也类似于zk事件通知
Redis官网是有了一个redis解决分布锁框架redission