基于redis实现分布式锁

26 篇文章 622 订阅 ¥19.90 ¥99.00

前言

在上一篇中,我们利用mysql数据库的行锁特性,实现了一个简单的分布式锁,但是从经验即可判断,数据库的分布式锁实现,在高并发场景下性能方面应该会大打折扣,当然,如果能够提前预判系统的并发并不算太大,这种实现也是没问题的,下面介绍下分布式锁的第二种实现,基于redis实现分布式锁

redis分布式锁原理

redis实现分布式锁的原理其实非常简单,即通过一个 Setnx的命令进行实现,即:

SET resource_key_name resource_key_value NX PX 10000

简单解释下:

  1. resource_key_name :资源名称,可以根据不同的业务区分为不同的锁
  2. resource_key_value :随机值,每个线程的值不同,用于释放锁的时候进行校验
  3. NX :key不存在的时候可以设置成功,如果已经有线程进来并设置成功了,下一个线程过来时就设置失败【由于redis的操作是单线程的,对同一个key的操作必然会进行排队操作】
  4. PX :自动失效时间,当出现异常情况时,为了确保不会死锁,可以对锁设置超时时间

总结来说,就是利用NX的原子性,在多个线程并发执行时,确保只有一个线程可以设置成功

  • 设置锁成功,可以继续执行后续的业务
  • 如果出现异常,由于设定了有效期,过了锁的有效期,
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小码农叔叔

谢谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值