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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis与Zookeeper实现分布式锁的区别

發布時間:2023/12/2 数据库 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis与Zookeeper实现分布式锁的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Redis與Zookeeper實現分布式鎖的區別

1.分布式鎖解決方案

? ?1.采用數據庫 不建議 性能不好 jdbc

? ?2.基于Redis實現分布式鎖(setnx)setnx也可以存入key,如果存入key成功返回1,如果存入的key已經存在了,返回0.

? ?3.基于Zookeeper實現分布式鎖 Zookeeper是一個分布式協調工具,在分布式解決方案中。

? ? 多個客戶端(jvm),同時在zk上創建相同的一個臨時節點,因為臨時節點路徑是保證唯一,只要誰能夠創建節點成功,誰就能夠獲取到鎖,沒有創建成功節點,就會進行等待,當釋放鎖的時候,采用事件通知給客戶端重新獲取鎖的資源。

?

Redis實現分布式鎖與Zookeeper實現分布式鎖區別

實現分布式鎖最終是通過什么方式?(相同點)

在集群環境下,保證只允許有一個jvm進行執行。

從技術上分析(區別)

Redis 是nosql數據,主要特點緩存

Zookeeper是分布式協調工具,主要用于分布式解決方案

實現思路(區別)

核心通過獲取鎖、釋放鎖、死鎖問題

?

獲取鎖

Zookeeper

多個客戶端(jvm),會在Zookeeper上創建同一個臨時節點,因為Zookeeper節點命名路徑保證唯一,不允許出現重復,只要誰能夠先創建成功,誰能夠獲取到鎖。

Redis

多個客戶端(jvm),會在Redis使用setnx命令創建相同的一個key,因為Redis的key保證唯一,不允許出現重復,只要誰能夠先創建成功,誰能夠獲取到鎖。

?

釋放鎖

Zookeeper使用直接關閉臨時節點session會話連接,因為臨時節點生命周期與session會話綁定在一塊,如果session會話連接關閉的話,該臨時節點也會被刪除。

這時候客戶端使用事件監聽,如果該臨時節點被刪除的話,重新進入盜獲取鎖的步驟。

Redis在釋放鎖的時候,為了確保是鎖的一致性問題,在刪除的redis 的key時候,需要判斷同一個鎖的id,才可以刪除。

?

共同特征:如何解決死鎖現象問題

Zookeeper使用會話有效期方式解決死鎖現象。

Redis 是對key設置有效期解決死鎖現象

?

性能角度考慮

因為Redis是NoSQL數據庫,相對比來說Redis比Zookeeper性能要好。

可靠性

從可靠性角度分析,Zookeeper可靠性比Redis更好。

因為Redis有效期不是很好控制,可能會產生有效期延遲,Zookeeper就不一樣,因為Zookeeper臨時節點先天性可控的有效期,所以相對來說Zookeeper比Redis更好

?

?

轉載于:https://www.cnblogs.com/handsome1013/p/11430015.html

總結

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

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