成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

分布式Redis的分布式鎖Redlock

開發 后端 其他數據庫 分布式 分布式 Redis
之前自己在用redis來實現分布式鎖的時候都是基于單個Redis實例,也就是說Redis本身是有單點故障的,Redis的官方文檔介紹了一種"自認為"合理的算法,Redlock來實現分布式Redis下的分布式鎖。

 

引言

之前自己在用redis來實現分布式鎖的時候都是基于單個Redis實例,也就是說Redis本身是有單點故障的,Redis的官方文檔介紹了一種"自認為"合理的算法,Redlock來實現分布式Redis下的分布式鎖。

Martin Kleppmann寫了一篇文章分析Redlock。然后redis的作者寫了一篇反駁的文章這里。加油。

Redlock實現庫

  • Java Redisson Star 9458
  • C# RedLock.net Star 259
  • Go redsync.go Star 249

雖然后面的算法是一樣的,不過這個點贊數確實服。

單點Redis鎖

先簡單回顧一下單點的Redis鎖是怎么實現的。

獲取鎖 

  1. SET resource_name my_random_value NX PX 30000 

客戶端A在Redis上設置一個特定的鍵值對,同時給一個超時時間(避免死鎖)。其他客戶端在訪問的時候先看看這個key是否已經存在,并且值等于my_random_value。如果已存在就等待,否則就獲取成功,執行業務代碼。resource_name和my_random_value是所有客戶端都知道并且共享的。

釋放鎖 

  1. if redis.call("get",KEYS[1]) == ARGV[1] then return redis.call("del",KEYS[1])else return 0end 

對比key獲取到的對應的value是否相等,如果相等,就刪除(釋放),否則就返回失敗。

之前也寫過一篇文章。

單點Redis鎖的缺陷

這個缺陷其實很明顯,如果只有一個Redis實例,這個掛了,所有依賴他的服務都掛了。顯然不太適合大型的應用。

簡單的Redis主從架構碰到的問題

為了避免單點故障,我們給Redis做一個Master/Slave的主從架構,一個Master,一臺Slave。下面就會碰到這么一個問題。下面是使用場景。

  1. 客戶端A在Master上獲取到一個鎖。
  2. Master把這個數據同步到Slave的時候掛了(因為Master和Slave之間同步是異步的)。
  3. Slave變成了Master。
  4. 客戶端B通過相同的key,和value獲取到鎖。分布式鎖失效

Redlock算法

假設我們有N(假設5)個Redis master實例,所有節點相互獨立,并且業務系統也是單純的調用,并沒有什么其他的類似消息重發之類的輔助系統。下面來模擬一下算法:

       1.客戶端獲取服務器當前的的時間t0,毫秒數。

        2.使用相同的key和value依次向5個實例獲取鎖。客戶端在獲取鎖的時候自身設置一個遠小于業務鎖需要的持續時間的超時時間。舉個例子,假設鎖需要10秒,超時時間可以設置成比如5-50毫秒。這個避免某個Redis本身已經掛了,但是客戶端一直在嘗試獲取鎖的情況。超時了之后就直接跳到下一個節點。

        3.客戶端通過當前時間(t1)減去t0,計算獲取鎖所消耗的時間t2(=t1-t0)。只有t2小于鎖的業務有效時間(也就是第二步的10秒),并且,客戶端在至少3(5/2+1)臺上獲取到鎖我們才認為鎖獲取成功。

        4.如果鎖已經獲取,那么鎖的業務有效時間為10s-t2。

        5.如果客戶端沒有獲取到鎖,可能是沒有在大于等于N/2+1個實例上獲取鎖,也可能是有效時間(10s-t2)為負數,我們就嘗試去釋放鎖,即使是并沒有在那個節點上獲取到。

鎖的釋放

釋放比較簡單,直接刪除所有實例上對應的key就好。喜歡文章的可以點個關注喲,感謝你的閱讀!

責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2021-06-03 00:02:43

RedisRedlock算法

2021-07-30 00:09:21

Redlock算法Redis

2019-02-26 09:51:52

分布式鎖RedisZookeeper

2023-08-21 19:10:34

Redis分布式

2022-01-06 10:58:07

Redis數據分布式鎖

2018-07-17 08:14:22

分布式分布式鎖方位

2022-06-16 08:01:24

redis分布式鎖

2023-01-13 07:39:07

2024-10-07 10:07:31

2022-09-19 08:17:09

Redis分布式

2020-11-16 12:55:41

Redis分布式鎖Zookeeper

2024-04-01 05:10:00

Redis數據庫分布式鎖

2019-07-16 09:22:10

RedisZookeeper分布式鎖

2021-06-16 07:56:21

Redis分布式

2021-07-16 07:57:34

ZooKeeperCurator源碼

2022-08-04 08:45:50

Redisson分布式鎖工具

2017-10-24 11:28:23

Zookeeper分布式鎖架構

2023-03-01 08:07:51

2024-11-28 15:11:28

2019-10-10 09:16:34

Zookeeper架構分布式
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久亚洲国产精品日日av夜夜 | 欧美一区二区三区视频 | 91久久精 | 亚洲精品久久久一区二区三区 | 欧美一二精品 | 欧美日韩国产在线 | 中文字幕一区二区三区在线观看 | 精品国产免费一区二区三区五区 | 成人国产精品久久久 | 国产午夜精品久久久久 | 欧美一级免费 | 亚洲在线看 | 国产精品久久久久久久一区二区 | 一本一道久久a久久精品蜜桃 | 精品国产乱码久久久久久88av | 欧美性久久 | 欧美九九九 | 99伊人网| 爱爱免费视频网站 | 欧美精品久久久 | 欧美一级片在线 | 欧美日韩视频一区二区 | 伊人天堂网 | 久夜精品 | 国产一区二区在线视频 | 久色网 | 久久久久国产精品一区二区 | 欧美综合久久久 | 亚洲激情一区二区三区 | 99久久久久久 | 国内精品久久久久久 | 噜噜噜噜狠狠狠7777视频 | 日韩一级免费电影 | 精品国产精品一区二区夜夜嗨 | 国产a一区二区 | 国产xxx在线观看 | 精品一区二区视频 | 欧美性猛交一区二区三区精品 | 日本久久久影视 | 精品综合在线 | 国产一区二区精品在线观看 |