亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:12日期:2022-08-28 11:54:29

01分布式鎖運用場景

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

 @RestController@Slf4jpublicclassIndexController{@AutowiredprivateRedissonredission;@AutowiredprivateStringRedisTemplatestringRedisTemplate;@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分布式架構 分布式鎖內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
主站蜘蛛池模板: 九九九好热在线 | 日本淫视频 | 青青草a国产免费观看 | 亚洲综合性 | 国产成人激情 | 国产精品片 | 中国人xxxxbbbb国产 | 欧美国产在线观看 | 三级黄免费 | 亚洲精品成人7777在线观看 | 成人免费视频一区二区三区 | 国产高清在线精品免费不卡 | 一级啊片 | 亚洲精品国产三级在线观看 | 美女一级毛片免费看看 | 麻豆国产免费影片 | 婷婷在线五月 | 欧美aaaaaaaaaa | 精品一区二区三区在线视频观看 | 亚洲欧美日韩综合久久久久 | 免费在线观看a级毛片 | 中文国产成人精品久久久 | 国产一级毛片视频在线! | 亚洲 日本 欧美 日韩精品 | 毛片免费网站 | 在线成人福利视频 | 日韩a级毛片免费视频 | 亚洲午夜久久久 | 九九久久国产精品 | 萝l在线精品社区资源 | 日韩免费一区二区 | 把女人弄爽特黄aa大片视频 | 一级黄色片免费播放 | 久久不卡| 一级黄色网片 | 精品女同一区二区三区免费站 | 国产精品88| 久久精品亚洲热综合一本奇米 | 免费a级黄色毛片 | 国产在线播放一区 | 成人亚洲网站 |