亚洲综合视频在线_国产亚洲欧洲一区高清在线观看_欧美日韩成人综合_国产精品99久久久久久白浆小说_美女在线一区二区_欧美性xxxxx极品_国内偷自视频区视频综合_亚洲色图18p_亚洲视频一二三区_国产日韩欧美中文

5分鐘快速理解redis分布鎖

2023-03-29 22:09:51 來源:騰訊云

打印 放大 縮小

目標:

我們了解分布式鎖先要理解幾個問題:

1.任何時候只有一個線程持有鎖


(相關資料圖)

2.要防止一個線程長期持有鎖甚至是死鎖的情況

3.加鎖和解鎖必須是同一個進程

4.鎖延續

Redis分布式鎖:

常見的分布式鎖有redis分布式鎖,zookeeper分布式鎖,本文將為大家闡述redis分布式鎖。

首先,redis分布式鎖的本質就是在redis占一個坑位,利用的setnx命令,然后處理完其余的業務后再del。再setnx后如果有其它的線程進來再setnx那么是set不進去的。這就是占坑的原理。

此時第一個問題就出現了:在del之前 我的業務如果出現了錯誤,那么就不會去執行del,就會出現死鎖的情況。

這種情況的解決方案很簡單 我們只需要增加一個超時時間即可。比如設置超時時間10s鎖將會自動釋放。在redis2.8之后 setnx和expire是原子操作 我們不用考慮setnx后因為各種問題沒有expire的情況。

那么現在就會有第二個問題:鎖超時問題。

Redisson分布式鎖這邊我們使用redisson的分布式鎖來解決這個問題。

先看一段lua腳本:

if (redis.call("exists", KEYS[1]) == 0) then " +   "redis.call("hincrby", KEYS[1], ARGV[2], 1); " +   "redis.call("pexpire", KEYS[1], ARGV[1]); " +   "return nil; " +   "end; " +

和大家解釋一下這一段lua腳本的意思:

exsist 先判斷有沒有這個key,來看鎖是否存在。

存在的話用hincrby設置一個hsah結構,然后再pexpire設置過期時間

我們再看一下redisson的一個加鎖解鎖流程圖:

我們可以看到redisson使用了 watchdog來做鎖延遲操作。

在我們redisson.trylock的時候有一個參數是releasedTime,這個參數的含義就是釋放鎖的時間。我們這個參數如果傳了,那么看門狗就會不生效,沒傳的話看門狗生效,這一點很重要。

redisson 看門狗會默認10s執行一次,如果沒有鎖釋放,那么自動鎖延續。

大家看這張圖可以看到,redisson還采用了redis的消息訂閱與發布,如果一個線程設置了waitTime,他就會去在這個時間里去等待,訂閱了一個channel,當占鎖線程一旦釋放了鎖,占鎖線程就回去發布一條消息,等待的線程訂閱到了 就可以去重試再占鎖。[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-C0EVK9Y0-1678841063259)(redis分布式鎖流程.png)]

流程分析:

1.客戶端1嘗試獲取鎖,返回null則加鎖成功,如果有設置釋放時間則直接通過lua腳本去操作redis,如果沒有設置則開啟看門狗機制。當沒有設置釋放時間,默認釋放時間為30s,看門狗機制會10s進行一次所延續。

2.當客戶端2獲取鎖失敗,則通過redis的channel訂閱鎖釋放的時間。當超過最大等待時間,則鎖失效。如果等待到了鎖釋放時間的通知,則開始重新進入循環開始重試加鎖。

3.循環中每次都先試著獲取鎖,并得到已存在鎖的剩余時間。如果拿到了鎖,直接返回。如果鎖還存在,那么等待釋放鎖的消息,這里采用了信號量來阻塞線程,當鎖釋放并發布釋放鎖的消息后,信號量的release方法被調用,此時被信號量阻塞的隊列中的第一個線程就可以繼續嘗試獲取鎖了。

我們再看一下釋放鎖的代碼

// 判斷鎖 key 是否存在            "if (redis.call("hexists", KEYS[1], ARGV[3]) == 0) then " +                "return nil;" +            "end; " +            // 將該客戶端對應的鎖的 hash 結構的 value 值遞減為 0 后再進行刪除            // 然后再向通道名為 redisson_lock__channel publish 一條 UNLOCK_MESSAGE 信息            "local counter = redis.call("hincrby", KEYS[1], ARGV[3], -1); " +            "if (counter > 0) then " +                "redis.call("pexpire", KEYS[1], ARGV[2]); " +                "return 0; " +            "else " +                "redis.call("del", KEYS[1]); " +                "redis.call("publish", KEYS[2], ARGV[1]); " +                "return 1; "+            "end; " +            "return nil;",Arrays.asList(getName(), getChannelName()), LockPubSub.UNLOCK_MESSAGE, internalLockLeaseTime, getLockName(threadId));

步驟解析:

1.判斷是否存在,如果存在的話先把可重入的值遞減為0,再進行刪除

2.廣播鎖釋放消息,通知阻塞等待的進程(向通道名為redisson_lock__channelpublish 一條 UNLOCK_MESSAGE 信息)。

3.取消看門狗機制,即將RedissonLock.EXPIRATION_RENEWAL_MAP里面的線程 id 刪除,并且 cancel 掉 Netty 的那個定時任務線程。

總結

Redisson的優點:1.通過watchdog解決了 鎖延續問題

2.和zookeeper比較,性能更高。

3.支持可重入鎖

4.在等待申請鎖資源的進程等待申請鎖的實現上做了優化,減少了無效的鎖申請,提高了資源的利用率

缺點:1.在redis分布式鎖的情況下,Master redis 加鎖,然后把key同步給slave,此時master宕機,那么slave變成了master,這就會出現問題,產生臟數據。 這里用連鎖的方式可以解決這個問題。

關鍵詞:

責任編輯:ERM523

相關閱讀

亚洲综合视频在线_国产亚洲欧洲一区高清在线观看_欧美日韩成人综合_国产精品99久久久久久白浆小说_美女在线一区二区_欧美性xxxxx极品_国内偷自视频区视频综合_亚洲色图18p_亚洲视频一二三区_国产日韩欧美中文
4438x成人网最大色成网站| 久久久久久亚洲综合| 亚洲成av人片一区二区三区| 欧美激情一区三区| 国产aⅴ精品一区二区三区色成熟| 成人动漫一区二区在线| 久久久99久久精品欧美| 国产成人综合自拍| 综合激情成人伊人| 欧美日韩一区二区三区四区 | 一区二区三区中文在线| 国产日韩欧美制服另类| 日韩欧美色综合网站| 一本大道久久a久久精二百 | 在线观看一区二区精品视频| 香蕉成人啪国产精品视频综合网| 51精品秘密在线观看| 日韩高清在线不卡| 国产网站一区二区三区| 欧美一级片免费看| 99久久免费精品| 成人黄色一级视频| 久久99国产精品久久| 中文字幕在线观看一区二区| 精品国产伦一区二区三区免费| 91在线播放网址| 粉嫩一区二区三区在线看| 蜜桃一区二区三区在线| 亚洲影视在线播放| 日本一二三四高清不卡| 国产日韩欧美综合一区| 国产欧美一区二区三区在线看蜜臀 | 国产视频一区在线观看| 久久久久久电影| 精品久久久久久久人人人人传媒| 91精品国产综合久久精品麻豆| 亚洲不卡一区二区三区| 亚洲成人激情自拍| 亚洲人成精品久久久久久| 中文欧美字幕免费| 久久超碰97人人做人人爱| 久久精品国产亚洲高清剧情介绍| 性做久久久久久免费观看| 美国十次了思思久久精品导航| 国产一区二区精品久久| 91美女在线观看| 国产电影精品久久禁18| 成人精品免费网站| 日韩欧美国产一区在线观看| 国产亚洲精品福利| 爽好多水快深点欧美视频| 国产成人丝袜美腿| 日韩欧美色综合网站| 亚洲综合精品自拍| 91传媒视频在线播放| 久久久精品综合| 奇米综合一区二区三区精品视频| 亚洲三级在线观看| 亚洲成在人线在线播放| 亚洲国产美女搞黄色| 国产a级毛片一区| 18欧美亚洲精品| 亚洲国产精品ⅴa在线观看| 麻豆精品国产传媒mv男同| 日韩欧美国产精品| 高潮精品一区videoshd| 久久精品日产第一区二区三区高清版| 国产精品久久看| 丁香另类激情小说| 亚洲欧美偷拍卡通变态| 成人免费视频caoporn| 97久久精品人人爽人人爽蜜臀 | 国产精品欧美久久久久一区二区| 国产精品综合一区二区三区| 4438成人网| 久久亚洲影视婷婷| 欧美丝袜丝nylons| 亚洲精品欧美二区三区中文字幕| 欧美日韩一级视频| 国内精品国产成人| 亚洲精品视频在线观看免费 | 国产福利91精品一区二区三区| 亚洲欧洲av一区二区三区久久| 欧美日本国产一区| 午夜精品久久久久久| 亚洲欧洲av色图| 国产欧美日本一区二区三区| 久久久久久夜精品精品免费| 欧美日本免费一区二区三区| 欧美丝袜丝交足nylons图片| 日本二三区不卡| 中文字幕欧美激情| 亚洲视频一区二区免费在线观看 | 国产免费成人在线视频| 91福利在线免费观看| av动漫一区二区| 99久久久久久99| 九九久久精品视频| 成人精品国产一区二区4080| 成人午夜视频网站| 欧美日韩精品专区| 欧美精品久久久久久久久老牛影院| 日韩中文欧美在线| 国产精品综合网| 午夜天堂影视香蕉久久| 激情五月婷婷综合网| 盗摄精品av一区二区三区| 成+人+亚洲+综合天堂| 国产呦萝稀缺另类资源| 懂色中文一区二区在线播放| 一区二区三区视频在线观看| 日本在线观看不卡视频| 99久久久久免费精品国产| 午夜精品久久久久| 国产精品蜜臀在线观看| 美女www一区二区| 91九色最新地址| 国产三级精品视频| 精品综合免费视频观看| 欧美二区三区91| 日韩国产成人精品| www久久久久| 成人理论电影网| 亚洲免费观看视频| 丁香亚洲综合激情啪啪综合| 91精品国产色综合久久ai换脸| 亚洲超碰97人人做人人爱| 日本黄色一区二区| 亚洲第一av色| 91丨国产丨九色丨pron| 国产精品久久久久婷婷二区次| 久久国产精品色婷婷| 国产亚洲午夜高清国产拍精品| 国产一区二区三区美女| 国产视频视频一区| 99久久婷婷国产综合精品| 久久激五月天综合精品| 亚洲成人黄色小说| 免费在线看成人av| 福利电影一区二区| 色综合久久综合| 一区二区国产视频| 在线亚洲免费视频| 国产精品污污网站在线观看| 亚洲成人1区2区| 91福利区一区二区三区| 洋洋av久久久久久久一区| 成人av网站在线| 91麻豆免费在线观看| 91网站在线播放| 日韩欧美一级在线播放| 欧美一区二区三区视频免费播放| 5月丁香婷婷综合| 成人网在线免费视频| 色综合久久久久综合体| 成人免费一区二区三区在线观看| 国产欧美日韩在线视频| 亚洲综合小说图片| 精品制服美女丁香| 久久精品欧美日韩精品| 亚洲同性gay激情无套| 欧美色区777第一页| 精品国产乱码久久久久久影片| 美女一区二区三区| 欧洲色大大久久| 日韩经典一区二区| 国产98色在线|日韩| 国产在线日韩欧美| 久久色视频免费观看| 国产91高潮流白浆在线麻豆| 一区二区不卡在线播放 | 精品一区中文字幕| 精品国产乱码久久久久久浪潮| 中日韩av电影| 国产伦精一区二区三区| 99久久免费视频.com| 日韩经典中文字幕一区| 国产一区二区不卡| 欧美日韩一区小说| 亚洲va韩国va欧美va| www.激情成人| 亚洲人妖av一区二区| 亚洲欧洲日韩在线| 国产乱子轮精品视频| 国产成人av资源| 欧美一级片在线观看| 天堂蜜桃91精品| 欧美精品一区二区精品网| 久草精品在线观看| 国产丝袜在线精品| 99国产精品久久| 亚洲国产一区视频| 精品久久久久久综合日本欧美 | 日韩免费福利电影在线观看| 国产精品久久久久久亚洲毛片| 国产欧美一区二区三区鸳鸯浴| bt欧美亚洲午夜电影天堂| 婷婷综合五月天| 国产欧美一区二区精品性色| 日韩电影在线一区二区|