日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

分布式锁闲谈

發(fā)布時間:2024/7/23 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 分布式锁闲谈 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

分布式鎖閑談

前言

服務(wù)器單機(jī)情況下,要鎖住某個資源,我們一般用到的是synchronized,lock等鎖,這是java提供的,也確實能很有效的鎖住資源。

但是在服務(wù)器集群的情況下,上面這些單機(jī)鎖就不起作用了,你能鎖住這臺機(jī)器,但剩下的機(jī)器都沒鎖,就沒有意義。
所以,一般解決這種問題,我們都用分布式鎖。

分布式鎖原理

分布式鎖,主要原理就是新增了一個第三方存儲介質(zhì),代替以前的synchronized。
假設(shè)服務(wù)器A對某個資源加鎖后,就在這個第三方介質(zhì)中記錄,然后其他服務(wù)器再訪問該資源的時候,就能知道這個資源被鎖住了,效果就達(dá)到了。
所以也可以說,這個第三方資源,也可以理解成將服務(wù)器集群強(qiáng)行變成了一個單機(jī)服務(wù)器了。

一般情況下,能擔(dān)當(dāng)這個第三方介質(zhì)的,有以下三種。

1.數(shù)據(jù)庫
2.redis
3.zookeeper

1.數(shù)據(jù)庫

不管集群有幾個服務(wù)器,都會操作一張表
所以,想要加鎖,只需在數(shù)據(jù)庫中插入一條數(shù)據(jù)即可,記錄這個資源的唯一標(biāo)識,狀態(tài)為已加鎖。
再有加鎖的請求,一查數(shù)據(jù)庫已經(jīng)加鎖了,就是沒有獲取到鎖。

一般基于數(shù)據(jù)庫的分布式鎖,都會考慮以下幾個問題
鎖的失效時間(一般做法就是job定時掃,刪掉過期的鎖,但多久才算過期,是一個很值得仔細(xì)研究的問題,一般都是因具體業(yè)務(wù)來定)
數(shù)據(jù)庫的可靠性(這個倒不是主要問題,一般可以通過搭建集群等方式解決)
數(shù)據(jù)庫的效率問題(畢竟數(shù)據(jù)庫是讀磁盤,肯定沒有讀內(nèi)存快)

2.redis

這個應(yīng)該是最常見的,redis分布式鎖。
setNx方法估計很多人都用過,不多說了,set if not exist
舊版本的redis,加鎖和設(shè)置過期時間,但這樣是有問題的,比如加鎖了,但沒有來得及設(shè)置過期時間,服務(wù)掛了,那么這個鎖就死鎖了
新版redis,相當(dāng)于將這兩步合成一個方法了,支持多參數(shù),這就感覺很完美啊,不過我沒用過,可以試試,應(yīng)該沒問題。

一般基于redis的分布式鎖,會考慮以下問題:
鎖的失效問題(和數(shù)據(jù)庫分布式鎖一樣,失效時間設(shè)置多少算最優(yōu),沒有答案,只能job異步掃,一樣的問題,所以不能算是一個優(yōu)雅的解決方案)
鎖是非阻塞的 (成功失敗都會立即返回,這個要看業(yè)務(wù)怎么操作了,也可以在業(yè)務(wù)上手動阻塞住,這不是問題,但要知道)

3.zookeeper

大數(shù)據(jù)高并發(fā),一般用這個
使用臨時有序節(jié)點,服務(wù)器A的方法加鎖就在對應(yīng)方法節(jié)點上創(chuàng)建一個臨時有序節(jié)點,算是獲得鎖,因為第一個創(chuàng)建的,序號最小,所以后面再有其他服務(wù)器想要加鎖時,一查自己的節(jié)點的序號不是最小,所以就算沒有獲得鎖。
因為zookeeper的臨時有序節(jié)點,當(dāng)加鎖的這個線程斷掉后,這個節(jié)點也自動消失,那么鎖也就自動釋放了,是不是感覺特別合適做分布式鎖,上面兩個關(guān)于鎖的失效問題,用zookeeper得到了優(yōu)雅的解決

一般需要注意的是:
zookeeper相對復(fù)雜(zookeeper算是比較重量級的,甚至有些小項目都不會用到zookeeper,所以也沒有必要為了一個簡單的分布式鎖的問題,強(qiáng)行使用zookeeper)
性能問題(一般和redis比性能,都是弟弟)

總結(jié)

在性能方面,redis > zookeeper > 數(shù)據(jù)庫
在實現(xiàn)的復(fù)雜度方面,zookeeper > redis > 數(shù)據(jù)庫
對于新手而言,數(shù)據(jù)庫 > redis > zookeeper
可靠性方面,zookeeper > redis > 數(shù)據(jù)庫

所以,一般項目用redis分布式鎖就可以了,
如果對可靠性要求很高,那么建議考慮zookeeper分布式鎖,
幾乎很少用數(shù)據(jù)庫分布式鎖,主要還是性能問題。

補(bǔ)充

其實分布式鎖就是一個集群環(huán)境如何共享資源的問題,我們看問題的角度不應(yīng)該僅僅停留在分布式鎖這里。很多問題的解決方案,其實都是大同小異的。
比如shiro的集群session共享,一般做法也是放在redis中,其實和這個redis的分布式鎖原理一樣。
還有很多類似場景,歡迎評論補(bǔ)充。

總結(jié)

以上是生活随笔為你收集整理的分布式锁闲谈的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线观看视频亚洲 | 国产二区免费 | 91禁看片 | 蝌蚪网在线视频 | 一本色道久久综合亚洲精品按摩 | 亚洲欧洲免费无码 | 亚洲av无码乱码在线观看富二代 | 亚洲国产成人va在线观看天堂 | 午夜精品久久久久久久99热浪潮 | 色com| 毛片高清 | 欧洲精品码一区二区三区免费看 | 欧美成人乱码一区二区三区 | 欧美粉嫩videosex极品 | 日韩毛片在线视频 | 好吊色视频在线观看 | 精品人妻视频在线 | 女人张开双腿让男人捅 | 美女自拍偷拍 | 蜜臀国产AV天堂久久无码蜜臀 | 国产精品一区二区免费视频 | 午夜影视体验区 | 性猛╳xxx乱大交 | 一级丰满大乳hd高清 | 成人精品久久 | 97视频人人 | 黄色特级片 | 久久免费播放视频 | 中文字幕第23页 | 日韩在线观看一区二区 | free性满足hd国产精品久 | 久久青青草视频 | 96福利视频 | 日本h漫在线观看 | 亚洲一区你懂的 | 中文字幕在线播放视频 | www.色网站 | 久久精品无码Av中文字幕 | 成人91在线观看 | 99亚洲视频 | 少妇精品在线 | 中文字幕在线亚洲 | 国产免费一区 | 日本japanese丰满白浆 | 美腿丝袜av | 日韩精品成人 | 四虎影院在线视频 | 少妇又色又紧又大爽又刺激 | 6080亚洲精品一区二区 | 日本视频在线观看 | 中文av免费观看 | 久久国产电影 | 农村脱精光一级 | 日韩精品在线免费看 | 免费看成人啪啪 | 亚洲视频免费在线播放 | 国产校园春色 | 青青草日韩 | 麻豆一级片 | 日韩精品一区二区三 | 91在线日本 | 色久综合网 | 午夜影院一区 | 国产又粗又猛又爽又 | 亚洲啪啪网| 日韩www.| 成人毛片软件 | 91亚洲一区 | 97久久国产亚洲精品超碰热 | 午夜影院91 | 潘金莲一级淫片免费放动漫 | 久久激情影院 | 国产成人毛片 | 久久人人超碰 | 日韩人妻精品在线 | a天堂中文在线 | 亚洲综合日韩精品欧美综合区 | 在线成人一区二区 | 人与动物av| 国产乡下妇女做爰视频 | 玖草在线观看 | 视频一区在线观看 | 蜜臀av一区二区三区 | 粗大挺进潘金莲身体在线播放 | 偷拍一区二区 | 国产综合久久 | 亚洲国产传媒 | 可以在线观看的av | 69视频一区二区三区 | av大全在线观看 | 臭脚猛1s民工调教奴粗口视频 | 天天综合天天干 | 婷婷丁香花五月天 | 亚洲网站免费看 | 亚洲欧美在线一区二区 | 国产精品丝袜黑色高跟 | 精品人妻一区二区三区日产 | 澳门黄色一级片 | 国产精品无人区 |