spring整合curator實現分布式鎖


為什么要有分布式鎖?

比如說,我們要下單,分為兩個操作,下單成功(訂單服務),扣減庫存(商品服務)。如果沒有鎖的話,同時兩個請求進來。先檢查有沒有庫存,一看都有,然后下訂單,減庫存。這時候肯定會出現錯誤。我們想要的結果是。只有一個請求可以進來。當完成這個操作之后,下一個請求再進來。這才不會出現庫存賣超的現象。這時候,就需要我們使用分布式鎖來實現。

實現分布式鎖的方法有很多種。redis,zk都可以。但是還是推薦zk。

先說下大體思路:

首先,我們在下單的時候,先獲取鎖。如果獲取成功,就進行我們下面的業務處理。處理完之后。釋放鎖。然后其他請求如果也請求,同樣會先獲取鎖,當然獲取不到,所以就掛起,當別人釋放以后,然后再重新嘗試獲取鎖。

具體是如何獲取鎖?

主要通過zk來創建一個節點實現,就是說,剛開始沒有這個節點,說明沒有人獲取鎖,然后你創建了這個節點,說明你獲取到了這個鎖。記住,這個節點一定要是臨時節點。

然后,當然獲取鎖這個操作是一個死循環。通過一個靜態變量CountDownLatch 來控制。如果CountDownLatch 大於0 就wait掛起,當別人釋放之后,另繼續循環,嘗試獲取鎖。

釋放鎖就是說吧這個節點刪除。CountDownLatch 重新置為1。

 

 

代碼有空填上!!!!先占坑


免責聲明!

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



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