SpringBoot Redis 分布式锁的正确实现方式

本文详细探讨了SpringBoot中实现Redis分布式锁的常见错误、残血版和常用版解决方案,重点介绍了通过Lua脚本确保原子性操作。文章还涵盖了Spring Boot环境配置、依赖添加及实际代码实现,包括DistributedLock接口、加锁和解锁方法的实现,强调了释放锁和加锁的代码位置对于避免锁误释放的重要性。
摘要由CSDN通过智能技术生成

一、错误的分布式锁

使用 Redis SET 指令实现加锁, 指令满足了当 key 不存在则设置 value,同时设置超时时间,并且满足原子语意。

SET lockKey 1 NX PX expireTime
 
  • lockKey 表示锁的资源,value 设置成 1。

  • NX:表示只有 lockKey 不存在的时候才能 SET 成功,从而保证只有一个客户端可以获得锁。

  • PX expireTime 设置锁的超时时间,单位是毫秒;也可以使用 EX seconds 以秒为单位设置超时时间。

至于解锁操作,使用 DEL 指令删除。一个分布式锁方案出来了,一气呵成,组员不明觉厉,纷纷竖起大拇指,伪代码如下。

//加锁成功
if(jedis.set(lockKey, 1, "NX", "EX", 10) == 1){
  try {
      do work //执行业务

  } finally {
    //释放锁
     jedis.del(key
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值