基于redis的分布式锁的实现记录

首先,提出一个问题,为什么要用分布式锁?

    1.分布式环境下,应用由多机器集群部署,单纯的由JDK提供锁(sychronized,Lock)已经不能为集群应用提供统一的锁,故此需要分布式锁.

实现原理说明:

    使用的过redis的朋友应该知道SETNX命令,SETNX key value,将key的值设为value,当且仅当key不存在.简单来说就是不存在,设置成功,返回"OK",失败返回NULL,今天的实现就要依赖这条指令.




上面解锁操作要用lua脚本原因分析:


以上的概述就是在线程A通过key获取到了value,并且value和ThreadLocal中值相同,准备去删除锁的时间段内(这个时间段就叫time1吧),redis中的键值对过期,就在time1期间,线程B加锁成功,在做自己的业务操作,这时线程A将redis中的键值对删除,导致线程B在无锁条件下操作,导致安全问题,所以-->解锁操作必须是原子的

总结:分布式锁的实现有如下几种,应当结合实际情况考虑



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值