圖解分布式鎖實現方式原理視頻教程(zk+redis)
一、分布式鎖的適用場景介紹
首先,分布式鎖的應用條件前提必須得是分布式的系統,如果是單體項目下直接用synchronized鎖就可以了,壓根也用不到分布式鎖,因此,我們假定的條件必須有多臺機器部署多個節點。其次,分布式鎖最常見的應用場景應該就是下訂單減庫存的庫存超賣問題了。
比如我有兩臺機器分別提交訂單進行購買商品,然后后臺肯定會調用庫存的服務來削減庫存,就比如read的緩存庫存數量是1,第一個節點發現redis的庫存中是一,然后就會先到mysql數據庫削減庫存,然后再來改redis中的緩存數為0,但是在改的過程中,另一個節點也過來了,也發現redis中的緩存還是1,第一個節點還沒來得及修改,此時它同樣也會去mysql數據庫中改改庫存,這樣就會導致超賣的問題了,這就是最常見的庫存超賣問題,可以使用分布式鎖完美地解決。
二、分布式鎖的三種實現方式
業界實現分布式鎖總共有三種情況,分別是mysql數據庫端實現、Redis的redisson框架和自帶的nx鎖實現以及zoo keeper實現,其中redis和zookeeper實現分布式鎖,我們在文章里就不用多做介紹了,大家可以看本文提供的視頻,里面會有詳細的講解和案例講解,在這里我們只說一下數據庫端的分布式鎖如何實現。
數據庫端的實現方式無非就是怕兩個節點來同時修改一條數據而導致有臟數據的產生,因此常見的一種方式應該就是無鎖狀態下的鎖實現,就比如我們可以設置一個版本號,每次有節點來修改數據之前,先將這條數據查詢出來,然后拿著查詢出的版本號再來修改這條數據,如果版本號沒有發生改變,就可以修改成功,如果版本號被另一個節點修改過了,它的版本號就會加一,跟我們拿到的版本號就不一樣了,此時就會修改失敗,此時應該需要再次重新查詢出最新的版本號,再次拿著最新的版本號去數據庫更新數據,這就是mysql端的分布式鎖的實現方式,但是它也有缺點,缺點就是性能比redis的要慢,其次,在高并發的情況下,還會有鎖表和經常操作失敗的風險。
擴展閱讀:
基于Redis的SETNX實現分布式鎖
三、zk+redis實現圖解分布式鎖視頻教程課程信息
1、課程大小:2.87GB
2、課程課時:共計23課時
3、播放格式:(mp4視頻格式)百度云網盤在線播放、下載視頻播放器播放、不加密
4、課程板塊:zookeeper分布式鎖+Redis分布式鎖
5、課件說明:教程課程涵蓋素材、代碼、筆記資料
以下是分布式鎖實現方式原理視頻教程具體課程大綱:
1)由一個電商庫存中的超賣問題來引出鎖的應用
2)庫存超賣現象問題演示與分析
3)剖析能夠解決超賣的幾種方案與思路
4)單體架構下可以使用synchronized的鎖來解決庫存的超賣問題
5)單體架構下使用效率更高的ReentrantLock鎖來解決庫存超賣的現象
6)由以上兩個案例引出單體架構下的鎖帶來的性能問題和架構問題
7)由單體架構的局限性引出分布式鎖
8)分布式鎖的應用方式與原理剖析
9)使用redis自帶的分布式鎖來解決庫存超賣
10)zk的下載安裝應用啟動
11)剖析zookeeper底層的分布式鎖的原理
12)使用zookeeper編寫代碼完成超賣解決問題
13)使用zk的另外一種分布式鎖解決方案
14)應用redisson框架來解決分布式鎖的問題
15)分別使用spring框架和springboot框架整合redisson框架
16)多種分布式鎖實現方式的優劣對比
圖一:zk+redis多種方式實現分布式鎖視屏教程詳情
擴展閱讀: