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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redlock java_Redlock分布式锁

發布時間:2025/3/8 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redlock java_Redlock分布式锁 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這篇文章主要是對 Redis 官方網站刊登的 Distributed locks with Redis 部分內容的總結和翻譯。

什么是 RedLock

Redis 官方站這篇文章提出了一種權威的基于 Redis 實現分布式鎖的方式名叫 Redlock,此種方式比原先的單節點的方法更安全。它可以保證以下特性:

安全特性:互斥訪問,即永遠只有一個 client 能拿到鎖

避免死鎖:最終 client 都可能拿到鎖,不會出現死鎖的情況,即使原本鎖住某資源的 client crash 了或者出現了網絡分區

容錯性:只要大部分 Redis 節點存活就可以正常提供服務

怎么在單節點上實現分布式鎖

SET resourcename myrandom_value NX PX 30000

主要依靠上述命令,該命令僅當 Key 不存在時(NX保證)set 值,并且設置過期時間 3000ms (PX保證),值 myrandomvalue 必須是所有 client 和所有鎖請求發生期間唯一的,釋放鎖的邏輯是:

ifredis.call("get",KEYS[1])==ARGV[1]then

returnredis.call("del",KEYS[1])

else

return0

end

上述實現可以避免釋放另一個client創建的鎖,如果只有 del 命令的話,那么如果 client1 拿到 lock1 之后因為某些操作阻塞了很長時間,此時 Redis 端 lock1 已經過期了并且已經被重新分配給了 client2,那么 client1 此時再去釋放這把鎖就會造成 client2 原本獲取到的鎖被 client1 無故釋放了,但現在為每個 client 分配一個 unique 的 string 值可以避免這個問題。至于如何去生成這個 unique string,方法很多隨意選擇一種就行了。

Redlock 算法

算法很易懂,起 5 個 master 節點,分布在不同的機房盡量保證可用性。為了獲得鎖,client 會進行如下操作:

得到當前的時間,微妙單位

嘗試順序地在 5 個實例上申請鎖,當然需要使用相同的 key 和 random value,這里一個 client 需要合理設置與 master 節點溝通的 timeout 大小,避免長時間和一個 fail 了的節點浪費時間

當 client 在大于等于 3 個 master 上成功申請到鎖的時候,且它會計算申請鎖消耗了多少時間,這部分消耗的時間采用獲得鎖的當下時間減去第一步獲得的時間戳得到,如果鎖的持續時長(lock validity time)比流逝的時間多的話,那么鎖就真正獲取到了。

如果鎖申請到了,那么鎖真正的 lock validity time 應該是 origin(lock validity time) - 申請鎖期間流逝的時間

如果 client 申請鎖失敗了,那么它就會在少部分申請成功鎖的 master 節點上執行釋放鎖的操作,重置狀態

失敗重試

如果一個 client 申請鎖失敗了,那么它需要稍等一會在重試避免多個 client 同時申請鎖的情況,最好的情況是一個 client 需要幾乎同時向 5 個 master 發起鎖申請。另外就是如果 client 申請鎖失敗了它需要盡快在它曾經申請到鎖的 master 上執行 unlock 操作,便于其他 client 獲得這把鎖,避免這些鎖過期造成的時間浪費,當然如果這時候網絡分區使得 client 無法聯系上這些 master,那么這種浪費就是不得不付出的代價了。

放鎖

放鎖操作很簡單,就是依次釋放所有節點上的鎖就行了

性能、崩潰恢復和 fsync

如果我們的節點沒有持久化機制,client 從 5 個 master 中的 3 個處獲得了鎖,然后其中一個重啟了,這是注意 整個環境中又出現了 3 個 master 可供另一個 client 申請同一把鎖! 違反了互斥性。如果我們開啟了 AOF 持久化那么情況會稍微好轉一些,因為 Redis 的過期機制是語義層面實現的,所以在 server 掛了的時候時間依舊在流逝,重啟之后鎖狀態不會受到污染。但是考慮斷電之后呢,AOF部分命令沒來得及刷回磁盤直接丟失了,除非我們配置刷回策略為 fsnyc = always,但這會損傷性能。解決這個問題的方法是,當一個節點重啟之后,我們規定在 max TTL 期間它是不可用的,這樣它就不會干擾原本已經申請到的鎖,等到它 crash 前的那部分鎖都過期了,環境不存在歷史鎖了,那么再把這個節點加進來正常工作。

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 蜜臀久久精品久久久久久酒店 | 涩涩的视频在线观看 | 国产美女免费观看 | 福利在线网站 | 黄色片18 | 一级毛片儿| 黄视频免费在线观看 | 久久国产精品-国产精品 | 黄色一级免费片 | 日本人妻一区二区三区 | 91蝌蚪视频在线观看 | 亚洲熟女乱色综合亚洲小说 | 日韩不卡一区 | 国产又色又爽又高潮免费 | 国产三级免费观看 | 午夜精品极品粉嫩国产尤物 | 欧美深夜福利 | 中文字幕视频在线观看 | 91亚洲精华国产精华精华液 | 国模私拍在线 | 亚洲精品污 | 青青青国产 | 欧美a级在线免费观看 | 美日韩免费视频 | 欧美黄色一级视频 | 丰满大爆乳波霸奶 | 国产极品久久 | 香蕉91视频| 欧美丰满少妇 | 人善交videos欧美3d动漫 | 影音先锋在线视频观看 | 日本视频一区二区 | 国产jk精品白丝av在线观看 | 国产精品熟妇人妻g奶一区 a少妇 | 少妇在线| 国产va在线| 久久香蕉综合 | 男人添女人下部高潮视频 | 女同av在线| 黄色三级av | 久久爰| hd性videos意大利精品 | 日韩欧美自拍 | 日韩人妻精品中文字幕 | 在线观看亚洲大片短视频 | 国产一区二区久久久 | 男人女人拔萝卜视频 | 亚洲精品www久久久 一级aaa毛片 | 亚洲精品国产精品国自产网站 | 国外成人免费视频 | 欧美精品一区二区三区久久久 | 久久人人添人人爽添人人片 | 蜜臀久久99精品久久久久宅男 | 在线免费福利视频 | 日韩成人午夜电影 | 人妻洗澡被强公日日澡 | 久久新视频| 播播开心激情网 | 亚洲一区中文字幕在线观看 | 韩国三级视频在线 | 国产在线播放一区二区 | 天天干天天色综合 | 国产精品欧美久久久久久 | 亚洲欧美日韩精品久久亚洲区 | 蜜臀国产AV天堂久久无码蜜臀 | 97碰| 亚洲一区二区蜜桃 | 91在线视频观看 | 福利在线网站 | 在线a毛片 | 国产激情在线视频 | 精品妇女一区二区三区 | 97超碰人人模人人人爽人人爱 | 久久综合久久鬼色 | 成人av片在线观看 | 国产97视频| aaa级片| 伊人久久影视 | 97毛片| 激情福利视频 | 久久综合网址 | 91亚洲精品久久久蜜桃 | 人人av在线 | 91丨九色丨海角社区 | 国产一区二区三区成人 | 无码人妻精品一区二区三区在线 | 国产拍拍视频 | 国产精品第九页 | 求一个黄色网址 | av无码精品一区二区三区 | 久久成人免费视频 | 你懂的在线播放 | 免费黄色网址在线 | 国产熟女一区二区丰满 | 非洲黑寡妇性猛交视频 | 日韩欧美高清视频 | 亚洲欧美日韩精品在线 | 乱色精品无码一区二区国产盗 | 光明影院手机版在线观看免费 |