分布式鎖就是:控制分布式系統有序的去對共享資源進行操作,通過互斥來保持一致性。
舉個大白話一樣的例子:假設共享的資源是一輛共享汽車,這輛車在乙個時間只能有乙個人去駕駛,分布式系統就好比是要駕駛車的人,分布式鎖就是保證這個時間點只能乙個人駕駛,並且只有這一把鑰匙。然而,有好多人要租車,但是要按順序來排隊,第乙個人拿著鑰匙去用車,下乙個人要等著,當第乙個人用完車把車還回來,下乙個人才能繼續駕駛,然後就是以此類推。
為了保證分布式鎖的可用性,必須要滿足下面的四點條件!
1.互斥性:保證同一時間只能有乙個客戶端拿到鎖,也就是可以對共享資源進行操作。
2.安全性:鎖只能被持有該鎖的客戶端解鎖,不能由其他客戶端解鎖(解鈴還需繫鈴人)。
3.避免死鎖:出現死鎖(如down機可能會出現)就會導致後續的任何客戶端都拿不到鎖,不能再對共享資源進行任何操作了。
4.容錯:保證客戶端加鎖和解鎖操作是原子性操作,當部分節點(redis節點等)down機時,客戶端仍然能夠獲取鎖和釋放鎖。
1.資料庫樂觀鎖通常實現基於資料版本(version)的記錄機制實現的。
2.zookeeper的分布式鎖利
分布式鎖 使用Redis實現分布式鎖
關於分布式鎖的實現,我的前一篇文章講解了如何使用zookeeper實現分布式鎖。關於分布式鎖的背景此處不再做贅述,我們直接討論下如何使用redis實現分布式鎖。關於redis,筆主不打算做長篇大論的介紹,只介紹下redis優秀的特性。支援豐富的資料型別,如string list map set zs...
使用Redis實現分布式鎖
網上大部分建議都是使用setnx,這個本身沒有什麼問題,因為低版本的redis中,只有這個命令可以互斥的set乙個key。但是隨著redis版本的公升高,提供了更多的命令來更好的滿足我們的需求。set keyvalue ex seconds px milliseconds nx xx 這可和你所知道...
使用redis 實現分布式鎖
在有些需要高可用的場景中,保證併發量的情況下需要使用分布式鎖來做控制,保證應用的可靠性。我們知道jdk提供了一些常用的鎖比如reentrantlock,reentrantreadwritelock,synchronized。對於這些鎖的實現這裡就不詳細介紹了,在使用過程中這些鎖鎖的是物件,在單伺服器...