day08

本文介绍了分布式锁的概念,重点讨论了Redis的setnx指令实现以及Redisson框架在项目中的应用,涉及加锁、续期和lua脚本确保原子操作的过程。
摘要由CSDN通过智能技术生成

8-1 分布式锁有哪些实现方式?Redis是如何实现分布式锁的?讲一讲Redisson实现分布式锁的原理?

       分布式锁是一种用于分布式系统中的锁定机制,用于确保在集群的并发操作中只有一个节点可以执行关键代码段。这种锁定机制可以防止多个节点同时修改相同的数据或执行相同的操作,从而确保数据一致性

       实现分布式锁的方式也非常多,例如:

1.基于MySQL的唯一约束

2.基于Redis的setnx key value

Redis实现分布式锁的方式是setnx指令

以下是使用SETNX命令实现分布式锁的基本步骤:

1.当一个节点需要获取锁时,它向Redis发送SETNX命令,尝试在指定的键上设置一个特定的值(可以是唯一标识符)作为锁的值。

2.如果SETNX命令返回1,表示锁设置成功,节点获得了锁;如果返回0,表示锁已经被其他节点持有,节点获取锁失败。

3.当节点执行完临界区代码后,可以通过DEL命令释放锁。

需要注意的是,为了避免锁的过期问题,获取锁和释放锁需要在一个原子操作中完成,可以使用Lua脚本来确保这一点。

我在项目中使用的是redisson框架来实现分布式锁:

流程如下:

对于一个线程来说,首先会为这个线程进行加锁操作,加锁成功后会创建一个watch dog看门狗进程监听这个线程,并会每隔(releaseTime(锁的过期时间)/3)的时间为这个线程的锁续期,直到线程执行结束,当我们手动释放锁之后,watchdog也就不再需要监听这个线程,加锁成功后此时若有第二个线程尝试访问程序,第二个线程首先会尝试加锁,若加锁成功则继续,若加锁失败则会开始循环,不断尝试获取锁,直到加锁成功或循环次数达到阈值,加锁和设置过期时间等操作都是基于lua脚本完成的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值