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

歡迎訪問 生活随笔!

生活随笔

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

数据库

还不知道 Redis 分布式锁的背后原理?还不赶快学习一下

發布時間:2025/3/20 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 还不知道 Redis 分布式锁的背后原理?还不赶快学习一下 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

以前在學校做小項目的時候,用到Redis,基本也只是用來當作緩存。可阿粉在工作中發現,Redis在生產中并不只是當作緩存這么簡單。在阿粉接觸到的項目中,Redis起到了一個分布式鎖的作用,具體情況是這樣的:

該項目在某金融平臺中負責某塊業務,是一個分布式系統,線上大概跑著10個左右的實例。其中有一個步驟需要用戶支付一定的費用,Redis分布式鎖在其中大概處于這么一個位置:

可以看到在上分布式鎖之后,系統做了兩個查詢校驗,然后向數據庫中插入了一條訂單記錄,接著才解鎖進入支付流程。

從業務的角度考慮分布式鎖是好理解的,它保證了查詢及插入數據整個流程的原子性,防止查詢校驗的時候查到臟數據,使得支付前訂單信息落表的操作串行化執行。

盡管從業務上來說很好理解,但使用Redis作為分布式鎖對我來說是個新知識,阿粉打算結合項目中的代碼,深挖一下這個知識點。

正文

1. 為什么要使用分布式鎖

在實際項目中見過分布式鎖后,就不難理解為什么要使用分布式鎖了:總結來說就是分布式系統要訪問共享資源,為了避免并發訪問資源帶來錯誤,我們為共享資源添加一把鎖,讓各個訪問互斥,保證并發訪問的安全性,這就是使用分布式鎖的原因。

2. Redis中分布式鎖的實現

redis中使用分布式鎖很簡單,只要使用setnx指令對某個key上鎖就行:

setnx lock test //上鎖 del lock test //解鎖

當某個key沒有被占用的時候,setnx指令會返回1,否則返回0,這就是Redis中分布式鎖的使用原理。

當然我們還可以在上鎖之后使用expire指令給鎖設置過期時間。

看到這里你可能會有疑問,如果我們的程序流程不使用指令解鎖,靠redis設置時間過期來解鎖,貌似會出問題。假如我們的服務進程在執行setnx之后和執行expire指令之前掛掉了,那這個鎖豈不是永遠都不能被釋放?

沒錯,這確實是個問題,當時人們在Redis的開源社區提出了一堆解決方案專門來解決這個問題,可實現方式都極為復雜。后來Redis的作者在Redis 2.8版本中加入了set指令的擴展參數,使得setnx指令和expire指令能夠同時執行,具體使用像下面這個樣子:

set lock test ex 5 nx ex:設置鍵的過期時間 nx:只在鍵不存在時,才對鍵進行設置操作

從此以后,Redis成為了分布式鎖的寵兒。

3. 分布式鎖在Redis集群中遇到的麻煩

在學習了Redis中分布式鎖的使用后,很快我們便發現了新的問題。在企業中,Redis基本上都是集群部署的,集群部署避免不了要面對某個節點宕機的問題。

我們考慮這么一種情況:假設我們在redis的主節點上添加了一把分布式鎖,不幸的是主節點掛掉了,而且主節點上的鎖還沒有同步到從節點上,如果此時有客戶端來請求獲得同一把鎖,那么它將順利地獲得鎖,之前那把鎖會被無情地忽視掉,這就是分布式鎖在Redis集群中遇到的麻煩。

Redis的作者為了解決這個問題提出了一個叫Redlock的算法,它的原理是這樣的:當上鎖的時候,把set指令發送給過半的節點,只要過半的鎖set成功,就認為這次加鎖成功;當解鎖的時候,會向所有的節點發送del指令。

從這個算法的原理可以看出,由于Redlock需要同時對多個節點進行讀寫,因此使用Redlock加分布式鎖的性能要比單機Redis低很多。因為主從復制出紕漏的概率極低,所以如果對分布式加鎖過程有一定的容錯率的話,可以考慮直接使用set指令;如果追求高可用性,可以考慮使用Redlock算法。

當然,高可用性的分布式鎖不只有Redis的Redlock,我們還可以用zookeeper或者支持事務的數據庫做分布式鎖。

?

簡述zookeeper的分布式鎖原理:假設zk用某個節點作為分布式鎖,當不同的客戶端到zk競爭這把鎖的時候,zk會按順序給不同的客戶端創建一個子節點,掛在作為分布式鎖的節點下面。假設第一個來到的客戶端為A,第二個來到的是B,分布式節點下掛的第一個節點就是A,B緊跟著A,且B會監聽著A的生命狀態,當A釋放鎖后A會被刪除,這時B監聽到A被刪除,B接能上位獲得分布式鎖了。

?

在公司的項目中,雖然Redis是以集群的方式部署的,但還是使用最基本的set指令獲取分布式鎖,因為這種方式的性能遠遠高于Redlock算法,也高于zk,數據庫等分布式鎖實現方式。

雖然在高性能與低概率的錯誤中選擇了高性能,但項目中還是做了其他工作對錯誤情況進行兜底的,比如在公司的項目中對主從復制時的錯誤情況會拋出異常,然后根據異常會進行一些重試的操作。

總結

這次對Redis分布式鎖的探索算是加深了自己對Redis的理解,但我知道Redis的用處還遠遠不止分布式鎖和緩存,留著后面繼續探索吧。

總結

以上是生活随笔為你收集整理的还不知道 Redis 分布式锁的背后原理?还不赶快学习一下的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 欧美国产日韩一区二区三区 | 亚洲精品视频久久久 | 日本精品久久久 | 日韩精品电影一区二区三区 | 麻豆视频观看 | 婷婷视频网| 在线色网址| 亚欧洲精品在线视频 | 亚洲综合欧美综合 | 欧美精品video | 97国产成人无码精品久久久 | 2024国产精品 | 91红桃视频 | 偷拍第1页 | 中文在线观看视频 | 欧美日韩一区二区三 | 怡红院国产 | 成人自拍av | 亚洲成a人片在线www | 久久久噜噜噜久久中文字幕色伊伊 | 狠狠操狠狠爱 | 国产成人无码精品久久久电影 | 一区二区三区在线播放 | 欧美jizz19性欧美 | 日韩成人精品 | 日韩丰满少妇无码内射 | 中国人妖和人妖做爰 | 亚洲国产成人精品久久久 | 日韩中文在线播放 | 中文字幕免费视频 | 亚洲精品乱码久久久久久蜜桃91 | 91挑色| 亚洲另类色综合网站 | 国产精品九九九九 | 羞羞的网站在线观看 | 在线成人日韩 | 一级生活毛片 | 奇米网在线观看 | 奇米久久| 久久avav | 四虎影视免费永久观看在线 | 中文久久字幕 | 日本狠狠操 | 欧美一区二区视频在线 | 波多野吉衣一区二区 | 嫩草懂你 | 少妇又色又紧又大爽又刺激 | 久久中文字幕在线观看 | 美丽的姑娘在线观看免费 | 国产女主播av | 国产成人亚洲欧洲在线 | 国产亚洲色婷婷久久99精品 | 丁香九月激情 | 一级黄色片网址 | 波多野结衣a级片 | 少妇一级视频 | 中文字幕观看视频 | 少妇2做爰bd在线意大利堕落 | 精品国产午夜福利在线观看 | 午夜啪啪福利视频 | 九色在线视频 | 欧美日韩精品一二三区 | 中日韩精品视频在线观看 | 美国免费黄色片 | 久久天堂网 | 国产在线视频网址 | www.夜色| 狼性av懂色av禁果av | 国产大片一区二区三区 | 91亚色在线观看 | 在线观看色网站 | 污片在线免费看 | 中文字幕精品一区二区精品 | 日本福利在线 | 成人午夜免费福利视频 | 国产亚洲精久久久久久无码苍井空 | 一级淫片a | h视频在线免费看 | 中文字幕在线观看网址 | 久久99综合 | 欧美日韩黄色 | 天天操夜夜骑 | 人人艹人人爱 | av一级在线观看 | 亚洲区在线播放 | 宅男在线视频 | 台湾佬美性中文 | 91视频在线视频 | 国产资源一区 | 国产高清一区在线观看 | 在线看成人av | 91插视频 | 狂野欧美性猛交xxxx巴西 | 欧美精品四区 | 欧美老女人性生活视频 | 欧美国产第一页 | 天天干天天操天天插 | 丁香六月久久 | 爱爱视频一区二区 |