<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          redis實現分布式鎖天然的缺陷

          共 951字,需瀏覽 2分鐘

           ·

          2021-07-10 09:54

          點擊上方藍色字體,選擇“標星公眾號”

          優(yōu)質文章,第一時間送達

            作者 |  mushishi

          來源 |  urlify.cn/Mry6bi

          redis分布式鎖基本原理

          采用 redis 實現分布式鎖,主要是利用其單線程命令執(zhí)行的特性,一般是 setnx, 只會有一個線程會執(zhí)行成功,也就是只有一個線程能成功獲取鎖;看著很完美

          看看可能有什么問題?

          一般生產環(huán)境為了可用性,redis 會部署 master-slave + sentinel 的結構, 如:

          master 提供服務、slave standby 作為備份節(jié)點不提供服務, master異步將數據復制給 slave 以保證數據一致, sentinel哨兵檢查 master節(jié)點,當master節(jié)點故障時 將slave節(jié)點提升為 新的master 對外提供服務;

          正常情況下,都是當前 master 對外提供服務,多個線程 setnx 只會有一個成功

          當 master 故障時

          線上環(huán)境嘛,總會有各種各樣的故障出現,這也是為什么要部署 ha 的原因;

          我們設想,thread-1 setnx a 1 成功后,master節(jié)點發(fā)生故障;但是,此時 a=1 這條數據還沒來得及同步到 slave 節(jié)點,然后 sentinel 哨兵會進行故障切換將 slave 提升上來對外提供服務, 然后 thread-2 來 setnx a 1 加鎖,因為之前鎖狀態(tài)在 slave 不存在,那這時候 thread-2 也會加鎖成功, 這個時候鎖的語義就被破壞了











          瀏覽 78
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费操网站久久久久 | 一级成人大片 | 亚洲高清福利视频 | 97国产成人无码精品久久久 | 欧美群妇大交群实录 |