SpringBoot電商項目實戰 — Redis實現分布式鎖


最近有小伙伴發消息說,在Springboot系列文第二篇,zookeeper是不是漏掉了?關於這個問題,其實我在寫第二篇的時候已經考慮過,但基於本次系列文章是實戰練習,在項目里你能看到Zookeeper相關內容的也只有dubbo注冊地址了。因為Zookeeper在項目中,我們不需要做任何配置和代碼,只需要在服務器上安裝一個Zookeeper應用即可。

 

包括對Zookeeper的依賴,我們在SpringBoot項目中只需要依賴Dubbo就ok了。在本次系列實戰中,我是本着少說多動手的原則,如果有些小伙伴學習分布式開發是為了找工作,那我建議你還是好好看下原理。今天要說說分布式鎖的實現。

分布式鎖實現

在分布式開發環境下,數據一致性問題一直是一個比較重要的話題。在很多場景中,我們為了保證數據的最終一致性,需要很多的技術方案來支持,比如分布式事務、分布式鎖等。有些的時候,我們必須保證系統里的某一個方法在同一時間內只能被同一個線程執行。在單機環境中,Java中其實提供了很多並發處理相關的API,但是這些API在分布式場景中就無能為力了。也就是說單純的Java Api並不能提供分布式鎖的能力。所以針對分布式環境我們需要有對應的鎖的解決方案。

目前常見的分布式鎖的實現方式有基於數據庫,基於緩存,基於Zookeeper等。但由於操作數據庫需要一定的開銷,會造成一定的性能問題。並且使用數據庫的行級鎖並不一定靠譜,尤其是當我們的鎖表並不大的時候。所有實際開發中使用Redis和Zookeeper實現的較多。

基於Redis的實現

Redis實現分布式鎖有幾種實現方法,分別為:

1,基於 redis 的 setnx()、expire() 方法做分布式鎖;

2,基於 redis 的 setnx()、get()、getset()方法做分布式鎖;

3,基於 Redlock 做分布式鎖;

4,基於 redisson 做分布式鎖;

今天我主要講的是基於redisson,redisson它是redis 官方的分布式鎖組件。Github地址:https://github.com/redisson/redisson

首先在pom里依賴Redisson。

 

再在公共模塊添加配置

 

加鎖和釋放鎖的方法

 

再Controller里寫鎖的實現

 

掃碼關注公眾號,發送關鍵詞獲取相關資料:

  1. 發送“Springboot”領取電商項目實戰源碼;
  2. 發送“SpringCloud”領取cloud學習實戰資料;

下期文章:分布式鎖的Zookeeper實現方式,及微服務開發下的任務調度,事務處理更多相關內容。

 


免責聲明!

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



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