Redis分布式鎖,你用對(duì)了嗎?
PART1.分布式鎖是什么?
具備哪些特性的分布式鎖才是一個(gè)優(yōu)秀的分布式鎖?牛牛認(rèn)為要從如下幾方面來(lái)看:
互斥性:鎖的目的是獲取資源的使用權(quán),所以只讓一個(gè)競(jìng)爭(zhēng)者持有鎖,這一點(diǎn)要盡可能保證; 安全性:避免死鎖情況發(fā)生。當(dāng)一個(gè)競(jìng)爭(zhēng)者在持有鎖期間內(nèi),由于意外崩潰而導(dǎo)致未能主動(dòng)解鎖,其持有的鎖也能夠被正常釋放,并保證后續(xù)其它競(jìng)爭(zhēng)者也能加鎖; 對(duì)稱性:同一個(gè)鎖,加鎖和解鎖必須是同一個(gè)競(jìng)爭(zhēng)者。不能把其他競(jìng)爭(zhēng)者持有的鎖給釋放了,這又稱為鎖的可重入性。 可靠性:需要有一定程度的異常處理能力、容災(zāi)能力。
分布式鎖,一般會(huì)依托第三方組件來(lái)實(shí)現(xiàn),而利用Redis實(shí)現(xiàn)則是工作中應(yīng)用最多的一種。
今天,就讓我們從最基礎(chǔ)的步驟開(kāi)始,依照分布式鎖的特性,層層遞進(jìn),步步完善,將它優(yōu)化到最優(yōu),讓大家完整地了解如何用Redis來(lái)實(shí)現(xiàn)一個(gè)分布式鎖。
最簡(jiǎn)化版本

支持過(guò)期時(shí)間

能夠支持過(guò)期時(shí)間,目前這個(gè)鎖基本上是能用了。
加上owner

引入Lua

容災(zāi)考慮
主從容災(zāi)


多機(jī)部署



有道無(wú)術(shù),術(shù)可成;有術(shù)無(wú)道,止于術(shù)
歡迎大家關(guān)注Java之道公眾號(hào)
好文章,我在看??
評(píng)論
圖片
表情
