真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

SpringBoot整合Redis實現(xiàn)分布式鎖的方法-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!

站在用戶的角度思考問題,與客戶深入溝通,找到杭錦網站設計與杭錦網站推廣的解決方案,憑借多年的經驗,讓設計與互聯(lián)網技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網站制作、做網站、企業(yè)官網、英文網站、手機端網站、網站推廣、申請域名、網頁空間、企業(yè)郵箱。業(yè)務覆蓋杭錦地區(qū)。

這篇文章將為大家詳細講解有關SpringBoot整合Redis實現(xiàn)分布式鎖的方法,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

前言

最近在做分塊上傳的業(yè)務,使用到了Redis來維護上傳過程中的分塊編號。

每上傳完成一個分塊就獲取一下文件的分塊集合,加入新上傳的編號,手動接口測試下是沒有問題的,前端通過并發(fā)上傳調用就出現(xiàn)問題了,并發(fā)的get再set,就會存在覆蓋寫現(xiàn)象,導致最后的分塊數據不對,不能觸發(fā)分塊合并請求。

遇到并發(fā)二話不說先上鎖,針對執(zhí)行代碼塊加了一個JVM鎖之后問題就解決了。

仔細一想還是不太對,項目是分布式部署的,做了負載均衡,一個節(jié)點的代碼被鎖住了,請求輪詢到其他節(jié)點還是可以進行覆蓋寫,并沒有解決到問題啊

沒辦法,只有用上分布式鎖了。之前對于分布式鎖的理論還是很熟悉的,沒有比較好的應用場景就沒寫過具體代碼,趁這個機會就學習使用一下分布式鎖。

理論

分布式鎖是控制分布式系統(tǒng)之間同步訪問共享資源的一種方式。是為了解決分布式系統(tǒng)中,不同的系統(tǒng)或是同一個系統(tǒng)的不同主機共享同一個資源的問題,它通常會采用互斥來保證程序的一致性

SpringBoot整合Redis實現(xiàn)分布式鎖的方法

通常的實現(xiàn)方式有三種:

  • 基于 MySQL 的悲觀鎖來實現(xiàn)分布式鎖,這種方式使用的最少,這種實現(xiàn)方式的性能不好,且容易造成死鎖,并且MySQL本來業(yè)務壓力就很大了,再做鎖也不太合適
  • 基于 Redis 實現(xiàn)分布式鎖,單機版可用setnx實現(xiàn),多機版建議用Radission
  • 基于 ZooKeeper 實現(xiàn)分布式鎖,利用 ZooKeeper 順序臨時節(jié)點來實現(xiàn)
     

為了確保分布式鎖可用,我們至少要確保鎖的實現(xiàn)同時滿足以下四個條件:

  • 互斥性。在任意時刻,只有一個客戶端能持有鎖。
  • 不會發(fā)生死鎖。即使有一個客戶端在持有鎖的期間崩潰而沒有主動解鎖,也能保證后續(xù)其他客戶端能加鎖。
  • 具有容錯性。只要大部分的Redis節(jié)點正常運行,客戶端就可以加鎖和解鎖。
  • 解鈴還須系鈴人。加鎖和解鎖必須是同一個客戶端,客戶端自己不能把別人加的鎖給解了。
     

本文就使用的是Redis的setnx實現(xiàn),如果Redis是多機版的可以去了解下Radssion,封裝的就特別的好,也是官方推薦的

代碼

1. 加依賴

引入Spring Boot和Redis整合的快速使用依賴

 
      org.springframework.boot
      spring-boot-starter-data-redis
 

網站欄目:SpringBoot整合Redis實現(xiàn)分布式鎖的方法-創(chuàng)新互聯(lián)
標題路徑:http://weahome.cn/article/dpphed.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部