redis分布式鎖的實現

2022-03-18 09:03:10 字數 1214 閱讀 6723

工作中遇到了很多高併發的問題,例如獎品發放問題,有可能同乙個獎品傳送到了多個使用者身上,還有可能是多個使用者搶占一張票的問題。

(1)採用樂觀鎖的方式來解決問題,無論什麼併發,在資料庫層面,所有的請求都是線性的,我們可以採用樂觀鎖的方式來解決。

(2)採用redis的分布鎖來實現,這樣效率會非常的高,減輕資料庫的壓力。

1、我所採用的實現方式是:

1     private static final string lock_success = "ok";

2 private static final string set_if_not_exist = "nx";

3 private static final string set_with_expire_time = "px";

4 private static final long release_success = 1l;

5 6 /**

7 * 嘗試獲取分布式鎖

8 * @paramlockkey 鎖

9 * @paramrequestid 請求標識

10 * @paramexpiretime 超期時間

11 * @return是否獲取成功

12 */

13 public boolean trygetdistributedlock(string lockkey, string requestid, intexpiretime)

19 return false;

20 21 }

22 23 /**

24 * 釋放分布式鎖

25 * @paramlockkey 鎖

26 * @paramrequestid 請求標識

27 * @return是否釋放成功

28 */

29 publicboolean releasedistributedlock(string lockkey, string requestid)

36 return false;

37 38 }

以上是加鎖和解鎖的方式。

2、具體的應用 

try

...

}if(!flag)

}catch

()finally

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

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

redis實現分布式鎖

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

redis實現分布式鎖

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