Redis 實現分布式鎖

2021-09-11 22:42:07 字數 1193 閱讀 2029

本文介紹如何使用redis實現分布式鎖

對於每個鎖,最好有乙個唯一id,保證不會錯誤解鎖。(例如 :a鎖與b鎖的key相同,在a鎖過期的一瞬間,b鎖進行解鎖,若不校驗鎖id,會導致a鎖被解鎖)

redis提供了setnx(set if not exists),僅在key不存在時插入value

redis在2.6.12版本提供了set函式的過載,支援僅在key不存在時插入帶有過期時間的value

雖然redis沒有提供僅在value相同時刪除的命令,但是在2.6.0版本提供了exal用於執行指令碼,通過該指令碼可以

僅在value相同時刪除這一功能

下面介紹springboot實現分布式鎖

引入依賴

>

>

org.springframework.bootgroupid

>

>

spring-boot-starter-data-redisartifactid

>

>

>

>

io.lettucegroupid

>

>

lettuce-coreartifactid

>

exclusion

>

exclusions

>

dependency

>

鎖實現過程

public

class

lock

thread.

sleep(50

);} log.

info

("lock failed, try {} times"

, trycount)

;return null;

}/**

* 解鎖

* @param lockinfo 鎖資訊

* @return 解鎖結果

*/@override

public

boolean

unlock

(lockinfo lockinfo)

}

鎖使用過程

public

class

controller

}finally}}

}

分布式鎖 使用Redis實現分布式鎖

關於分布式鎖的實現,我的前一篇文章講解了如何使用zookeeper實現分布式鎖。關於分布式鎖的背景此處不再做贅述,我們直接討論下如何使用redis實現分布式鎖。關於redis,筆主不打算做長篇大論的介紹,只介紹下redis優秀的特性。支援豐富的資料型別,如string list map set zs...

redis實現分布式鎖

隨便 系統越來越大,各功能模組除了垂直切割以外,同時也得做集群處理,那麼問題來了,在多執行緒情況下對於資源的競爭就需要乙個統一的訪問限制。以選課系統為例子,集群中各節點對課程可選數量同時操作,這裡就需要同步了,否則會導致最後選到的數量比可選的數量大,這裡我們的分布式鎖就派上用場了。利用redis來實...

redis實現分布式鎖

分布式鎖可以基於很多種方式實現,比如zookeeper redis.不管哪種方式,他的 基本原理是不變的 用乙個狀態值表示鎖,對鎖的占用和釋放通過狀態值來標識。1 使用redis的setnx命令實現分布式鎖 1 實現的原理 redis為單程序單執行緒模式,採用佇列模式將併發訪問變成序列訪問,且多客戶...