解決Redis分布式鎖——死鎖問題


一、 Redis分布式鎖實現原理

SETNX key value //如果key不存在,則創建並賦值
EXPIRE key seconds //設置key的生存時間,當key過期(生存時間為0),會自動刪除

存在風險:SETNX和EXPIRE 為兩個指令,如果設置了SETNX后程序崩潰,EXPIRE未成功執行則會出現資源鎖死的情況。
二、針對該問題,redis 在2.6.12版本過后增加新的解決方案

set key value [expiration EX seconds|PX milliseconds] [NX|XX]

EX seconds:將鍵的過期時間設置為 seconds 秒。 SET key value EX seconds 等同於 SETEX key seconds value
PX millisecounds:將鍵的過期時間設置為 milliseconds 毫秒。 SET key value PX milliseconds 等同於 PSETEX key milliseconds value
NX:只在鍵不存在的時候,才對鍵進行設置操作。 SET key value NX 等同於 SETNX key value
XX:只在鍵已經存在的時候,才對鍵進行設置操作
三、例子

set name zhangsan EX 10 NX

當 "name" 不存在時進行設置,同時設置超時時間為10s(將SETNX和EXPIRE合二為一)
SET操作成功后,返回的是OK,失敗返回NIL


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM