Redis分布式锁的实现

本文深入探讨了分布式锁的概念及其实现方式,特别是在高并发环境下如何有效解决资源竞争问题。通过对比线程锁的局限性,引入Redis的SETNX命令实现分布式锁的基础版本,并讨论其潜在问题与改进方案,如使用Redission库进行更稳定的锁管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近面试被问道了一些分布式锁相关的问题,今天打算好好把分布式锁的问题看一下

1.先看一下简单的扣库存的例子

这个是最基础的扣库存的例子,在并发问题下肯定是有问题的,有些人可能会说,加个syn或者lock锁不就好咯,但是这面我要说

你想多了吧,syn和lock锁时线程级别的锁,我们现在的项目都是多个节点部署的,都是多进程的,你这个锁时没有用的,下面我们就要来看看我们分布式项目常用的分布式锁的实现来解决这个问题.

2.学习redis的分布式锁,我们先学习这个命令set

Redis Setnx(SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值,设置相同的key只有第一次会成功。

3.我们利用Setnx来实现一个简单版的分布式锁:

4.可以思考下这个实现有什么问题:

比如刚好第一个线程执行了Setnx,设置过期时间为10s命令,但是此时程序执行的异常的慢,全部代码执行完需要15s,你还没执行完你这个key就过期了,刚好第二个线程执行Setnx,第一个线程就会把第二个线程的锁key删除了,这就彻底乱套了啊、

5.有什么解决方案呢?

     1.线程设置完setnx之后开启一个分线程,开启一个定时器,每隔一段时间(超时时间的三分之一)检查自己设置的这个锁的key是否还存在,给他延时,续命等

      2.用redission

6.利用redission实现分布式锁

原理以后接着分析......

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值