redis使用jedis和redisssion实现分布式锁

使用redis 缓存实现分布式锁,主要分为两种
1.使用jedis客户端操作redis,实现分布式锁
2.使用redission框架操作redis,实现分布式锁
这两种方式其原理是一致的,都是使用lua脚本进行redis操作
加锁的本质是将key-value键值对存入redis,如果redis已经有了则加锁失败;如果没有则新增一个key-value则加锁成功。
释放锁的本质的将加锁时存入redis的key-value进行删除。

但是redisson框架实现了java的Lock,操作更加简单且功能更加强大。
使用jedis时必须将SETNX 和 SETEXPIRE一起执行(保证原子性)

在实现分布式锁时,必须考虑的一些异常情况:
Jedis 加入的过期时间设置,到达这个时间后,jedis会自动删除key.保证了系统宕机后,能正常释放锁,保证一定时间后其他线程可以获取到锁。但是如果到达过期时间后,业务还没有执行完,锁自动释放(所以锁的过期时间通常设置为业务代码执行锁需要的时间再长一点)。导致线程2获取锁后执行业务,这个时候线程1 执行结束后释放了锁2,这是就会产生问题。针对与这种情况,jedis加锁方法还有一个requestId的参数(可以UUID生成,为了区分该锁时哪一个请求的),这个时候就解决了上述问题。即实现了解铃还须系铃人(谁上锁谁解锁)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值