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

xiaoxiao2021-02-28  21

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

    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在无锁条件下操作,导致安全问题,所以-->解锁操作必须是原子的

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

转载请注明原文地址: https://www.6miu.com/read-2399959.html

最新回复(0)