java進階篇--什麼是分佈式鎖?如何實現分佈式鎖?

“鎖”是我們實際工作和麪試中無法避開的話題之一,正確使用鎖可以保證高併發環境下程序的正確執行,也就是說只有使用鎖才能保證多人同時訪問時程序不會出現問題。

我們本課時的面試題是,什麼是分佈式鎖?如何實現分佈式鎖?

回答:

之前的文章中我們講了單機鎖的一些知識,包括悲觀鎖、樂觀鎖、可重入鎖、共享鎖和獨佔鎖等內容,但它們都屬於單機鎖也就是程序級別的鎖,如果在分佈式環境下使用就會出現鎖不生效的問題,因此我們需要使用分佈式鎖來解決這個問題。

分佈式鎖是控制分佈式系統之間同步訪問共享資源的一種方式。是爲了解決分佈式系統中,不同的系統或是同一個系統的不同主機共享同一個資源的問題,它通常會採用互斥來保證程序的一致性,這就是分佈式鎖的用途以及執行原理。

分佈式鎖示意圖,如下圖所示:

分佈式鎖的常見實現方式有四種:

    1、基於 MySQL 的悲觀鎖來實現分佈式鎖,這種方式使用的最少,因爲這種實現方式的性能不好,且容易造成死鎖;
    2、基於 Memcached 實現分佈式鎖,可使用 add 方法來實現,如果添加成功了則表示分佈式鎖創建成功;
    3、基於 Redis 實現分佈式鎖,這也是本課時要介紹的重點,可以使用 setnx 方法來實現;
    4、基於 ZooKeeper 實現分佈式鎖,利用 ZooKeeper 順序臨時節點來實現。

由於 MySQL 的執行效率問題和死鎖問題,所以這種實現方式會被我們先排除掉,而 Memcached 和 Redis

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章