Redis分布式鎖簡單實現

2021-10-07 06:47:15 字數 1806 閱讀 9280

//偽**:下訂單

1、查庫存:getstock()

2、判斷庫存:stock>0下單

3、下單:addorder()

4、減庫存

public class redisutils 

/*** setnx

* @param key

* @param value

* @param seconds 過期時間,單位秒

* @return

*/public static boolean setnx(string key, string value, long seconds)

/*** 刪除key

* @param key

* @return

*/public static boolean deletekey(string key)

/*** 獲取nx設定的值

* @param key

* @return

*/public static string getnx(string key)

/*** 設定key的過期時間

* @param key

* @param seconds

* @return

*/public static boolean expirekey(string key,long seconds)

}

public class redislock 

/*** 上鎖

* @param uuid setnx的值,唯一標識當前執行緒

*/public void lock(string uuid) throws interruptedexception

//如果不一致,需要設定,為了避免死鎖,需要設定乙個過期時間

boolean b = redisutils.setnx(key, uuid,expireseconds);

//加鎖失敗,每隔兩秒重試一次

while(!b)

//開啟非同步執行緒延長過期時間

taskasync.delayexpiretime(uuid,key,expireseconds);

}/**

* 解鎖

* @param uuid 為了避免誤刪,這裡的uuid是唯一標識當前方法執行的,如果和當前方法的相同才能刪除

*/public void unlock(string uuid)

boolean b = redisutils.deletekey(key);

while(!b)

}}

@component

public class taskasync

}}

@configuration

@enableconfigurationproperties(value = )

public class redissonconfig

/*** 注入可重入鎖,用於訂單業務

*/@bean

public rlock orderlock(@qualifier(value = "redissonclient") redissonclient redissonclient,redissonproperties redissonproperties)

}

public void add(string goodsid) throws exception finally 

}

簡單聊聊分布式鎖 Redis分布式鎖

單機redis分布式鎖 單機redis分布式鎖 首先咱們先聊聊單機的redis分布式鎖 第乙個最普通的實現方式,就是在 redis 裡使用 setnx 命令建立乙個 key,這樣就算加鎖。set resource name my random value nx px 30000執行這個命令就 ok。...

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

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

redis實現分布式鎖

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