一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 淺談Java分布式架構下如何實現分布式鎖

淺談Java分布式架構下如何實現分布式鎖

2020-07-25 00:09林口 Java教程

這篇文章主要介紹了淺談Java分布式架構下如何實現分布式鎖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

  01分布式鎖運用場景

  互聯網秒殺,搶優惠卷,接口冪等性校驗。咱們以互聯網秒殺為例。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@RestController
 @Slf4j
 publicclassIndexController{
 @Autowired
 privateRedissonredission;
 @Autowired
 privateStringRedisTemplatestringRedisTemplate;
 @RequestMapping("/deduct_stock")
 publicStringdeductStock()throwsInterruptedException{
 intstock=Integer.parseInt
 (stringRedisTemplate.opsForValue().get("stock"));
 if(stock>0){
 intrealStock=stock-1;
 stringRedisTemplate.opsForValue().set("stock",realStock+"");
 log.info("扣減成功,剩下庫存+"+realStock);
 }else{
 return"庫存不足";
 }
 return"end";
 }
 }

  上面代碼假定多個線程一起進來,讀到胡成果相同,寫入的成果也相同。造成多個減庫存操作,只減少了一次。

 好多人想到的處理方式是加synchronized,但是假如是集群項目呢?搭建的是負載均衡項目。打開了兩個jvm進程,jvm進程鎖失效。

  用nginx做負載均衡,啟用兩個服務。進行下壓測。成果和咱們想的相同,用suynchronized關鍵字加鎖,兩臺服務器打印的剩下庫存有相同的。所以這種方法并沒有完成線程安全。

  02根據redisson完成分布式鎖

  咱們redis中有一個SETNXKEYVALUE,這個指令的時刻復雜度為O(1),只在鍵key不存在的情況下,將鍵key的值設置為value,若鍵key現已存在,則setnx指令不做任何操作,指令在設置成功時返回一,失利時分返回0.

  那么咱們能夠簡單用這個指令,完成一個十分簡單的分布式鎖。Springboot結構中咱們運用這個:

  stringRedisTemplate.opsForValue().setIfAbsent(),它底層是對setnx的封裝。

  這樣完成有什么問題?

  假如第一個線程拋了異常中斷了,其它線程就永遠不能處理了,所以咱們加上trycatch,finally。在finally里面delete咱們存的key值。

  假如程序宕機怎么辦?不是可捕獲異常怎么辦?

  這時分程序履行到沒有釋放鎖,即key值一向存在,在發動web服務的時分其它線程也一向不等待。這時分會一向存在死鎖,咱們是不是參加鎖的超時時刻是否能夠,即
  stringRedisTemplate.expire()

  程序迭代的過程是逐步的優化,假定我還沒來的及給鎖設置時長,服務就宕掉了,這時分該怎么辦。

  用兩行指令履行咱們能夠換成一行的指令,及設置key值的時分,一起設置時長,stringRedisTemplate.opsForValue().setIfAbsent()。合并成一個原子操作。

  這樣寫的化問題還是有的,假如你設置超時時刻為10秒,而我履行事務代碼為小于10秒,還沒履行完,就把鎖釋放掉了。高并發場景下你不能決議履行順序.

  能夠不能夠自己加的鎖,自己刪去,別的線程不能進行操作?
  咱們給每個線程設置一個uuid,唯一id。這樣輕輕松松解決了。
  商場上面現已有許多許多成熟的結構,咱們能夠不需要去手寫分布式結構來完成。

到此這篇關于淺談Java分布式架構下如何實現分布式鎖的文章就介紹到這了,更多相關Java分布式架構  分布式鎖內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/hite/p/13323434.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 九九热只有精品 | 久久亚洲电影www电影网 | 国内亚州视频在线观看 | 国产一二区视频 | 国产成人影院在线观看 | 草逼视频网址 | 欧美图片另类小说综合 | 亚洲AV精品一区二区三区不卡 | 成人啪精品视频免费网站 | 肥胖老寡妇做性 | 亚洲国产日韩制服在线观看 | 国产男人搡女人免费视频 | 国产91成人精品亚洲精品 | 关晓彤一级做a爰片性色毛片 | 日本五级床片全都免费播放 | 午夜影院免费体验 | 精品国产午夜久久久久九九 | 爆操女友 | 特级夫妻大片免费在线播放 | 91精品综合久久久久久五月天 | 天天天天天干 | 60岁了天天要小伙子 | 亚洲系列第一页 | 高清在线免费 | 欧美日韩亚洲国内综合网香蕉 | 无人在线视频高清免费观看动漫 | 亚洲国产精品无码中文在线 | 日本在线视频免费看 | 精品国产综合区久久久久久 | 日韩一区二区三区不卡视频 | 国产卡一卡二卡三卡四 | 精品一区在线 | 俄罗斯伦理片 | bnb998八度免费影院丫意浓 | 韩国美女主播在线 | 奇米小说 | 四虎影院永久在线 | 亚洲国产精品牛在线 | 精品亚洲一区二区三区在线播放 | 成人网欧美亚洲影视图片 | 粗了大了 整进去好爽视频 刺激一区仑乱 |