//偽**:下訂單
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來實...