久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

redis中分布式鎖是不是樂觀鎖

154次閱讀
沒有評論

共計 1056 個字符,預計需要花費 3 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

丸趣 TV 小編給大家分享一下 redis 中分布式鎖是不是樂觀鎖,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

  簡單來說,Redis 使用樂觀鎖,相對于悲觀鎖,在實現中更加簡單,在某些場景中的性能也更好。Redis 作為一個輕量級的、快速的緩存引擎,而不是一個全功能的關系型數據庫,既沒有使用悲觀鎖的必要,也難以承受使用悲觀鎖的成本。

樂觀鎖(Optimistic Lock),顧名思義,就是很樂觀,每次去拿數據的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候回判斷一下再次期間別人有沒有去更新這個數據,可以使用版本號等機制。樂觀鎖適用于多讀的應用類型,這樣可以提高吞吐量。

樂觀鎖策略:提交版本必須大于記錄當前版本才能執行更新

Redis 對于事務只提供了非常有限的支持,其實更多地是試圖繞過問題。

首先,Redis 對于同一事務中的一組操作,而不是立即執行,而是放入一個 queue 中,當執行到 EXEC 時,再一起執行。事務執行是全局獨占的,也就是同一時間只有一個事務被執行,中途不能被其它事務打斷。Redis 用這種最簡單的、也是性能最差的方式避免了 race condition。

其次,在 Redis 的事務中,如果有一個或多個操作失敗,其它操作仍然會成功,也就是說它根本沒有回滾機制。

這種方式會帶來很多嚴重的問題,其中之一是,無法先讀取某個數值后再進行依賴這個值的操作,因為放在一個事務里會被在同一個瞬間執行,不放在同一個事務里又會導致 race condition。解決方法是使用 WATCH,它會監視一個或多個變量,如果變量的值在調用 WATCH 以后和事務提交之前被別的事務修改過了,整個事務都會失敗。這類似于操作系統中的 CAS(Compare and Set)。我不知道 WATCH 具體是怎么實現的,但是我推測它監控了指定變量的版本號。

即使有了 WATCH,Redis 的事務也是受到嚴重限制的。第一,它沒有實現讀數據時的一致性,因為 WATCH 對于讀操作不起作用。第二,它不支持回滾。第三,在對同一變量存在大量并發寫操作時,性能會非常差,因為每次提交事務時,WATCH 監控的變量都已經被修改了,導致事務將多次提交失敗。但是,Redis 本來就是一個 KV 類型的緩存引擎,要處理的是大量讀少量寫的場景,對一致性也沒有要求。

看完了這篇文章,相信你對 redis 中分布式鎖是不是樂觀鎖有了一定的了解,想了解更多相關知識,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!

向 AI 問一下細節

丸趣 TV 網 – 提供最優質的資源集合!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-18發表,共計1056字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 彰武县| 丰城市| 湖北省| 长岛县| 永安市| 双峰县| 汝城县| 浦江县| 全州县| 武穴市| 抚顺市| 翁牛特旗| 丰城市| 游戏| 沅陵县| 霍山县| 龙里县| 团风县| 彭阳县| 湖北省| 荥经县| 休宁县| 金昌市| 乐亭县| 株洲县| 福泉市| 梁河县| 青田县| 潜山县| 宁德市| 安丘市| 宜兴市| 遂昌县| 调兵山市| 卢龙县| 囊谦县| 毕节市| 大余县| 彰化县| 英吉沙县| 尼玛县|