Redis實現分布式鎖機制

2021-09-01 05:57:59 字數 1689 閱讀 5436

redis實現分布式鎖思路

常用的是redis函式是setnx(),這個應該是實現分布式鎖最主要的函式。首先是將某一業務標識名作為鍵存到redis裡,並為其設個過期時間,如果是還有加鎖請求過來,先是通過setnx()看看是否能將鎖的標識插入到redis裡,可以的話就返回true,不可以就返回false。

一、使用lua指令碼簡單的實現redis鎖的實現 :

public

class

distributelocker

/** * 定義帶參建構函式

*/public distributelocker (lock lock)

public

void lock (

final string key,

final

int exprietime)

else

}finally

}/**

* 解鎖邏輯

*/public

void releaselock (string key)

}

public

inte***ce

lock

public

class

test

@override

public

void

failure()

}).lock

(key,secondtime);}

}

注:redis分布式鎖的實現方式有很多種,各有利弊,加鎖的時候主要注意檢查鎖與加鎖操作要有原子性,防止重複加鎖成功。過期時間主要是為了防止未釋放鎖導致鎖的一直存在,從而無法獲取鎖操作。

二、使用redisson框架

>

>

org.redissongroupid

>

>

redisson-spring-boot-starterartifactid

>

>

3.13.0version

>

dependency

>

@slf4j

@component

public

class

distributelocker

public

void lock (string key,

long exprietime, locktask task)

public

void lock (

long waittime, string key,

long exprietime, locktask task)

else

}catch

(exception e)

, e:{}"

, key, e);}

finally

}}

@enablediscoveryclient

public

class

@override

public

void

failure()

});}

}

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

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

redis訂閱發布機制實現分布式鎖

通常情況在解決分布式場景鎖機制都會首先想到redis。因為redis單執行緒天然就解決了這個問題。使用redis實現分布式鎖可以通過getset和setnx。redis getset db mongodb 沒有舊值,返回 nil nil redis get db mongodb redis gets...

redis實現分布式鎖

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