java 之 分布式锁

基于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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值