使用redis分布式鎖實現「茅台」秒殺

2021-10-14 07:41:58 字數 656 閱讀 2004

分布式鎖就是:控制分布式系統有序的去對共享資源進行操作,通過互斥來保持一致性。

舉個大白話一樣的例子:假設共享的資源是一輛共享汽車,這輛車在乙個時間只能有乙個人去駕駛,分布式系統就好比是要駕駛車的人,分布式鎖就是保證這個時間點只能乙個人駕駛,並且只有這一把鑰匙。然而,有好多人要租車,但是要按順序來排隊,第乙個人拿著鑰匙去用車,下乙個人要等著,當第乙個人用完車把車還回來,下乙個人才能繼續駕駛,然後就是以此類推。

為了保證分布式鎖的可用性,必須要滿足下面的四點條件!

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。對於這些鎖的實現這裡就不詳細介紹了,在使用過程中這些鎖鎖的是物件,在單伺服器...