91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis分布式鎖的實現原理

發布時間:2020-11-19 14:03:15 來源:億速云 閱讀:143 作者:小新 欄目:關系型數據庫

小編給大家分享一下redis分布式鎖的實現原理,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!

分布式鎖其實可以理解為:控制分布式系統有序的去對共享資源進行操作,通過互斥來保持一致性。

舉個不太恰當的例子:

假設共享的資源就是一個房子,里面有各種書,分布式系統就是要進屋看書的人,分布式鎖就是保證這個房子只有一個門并且一次只有一個人可以進,而且門只有一把鑰匙。然后許多人要去看書,可以,排隊,第一個人拿著鑰匙把門打開進屋看書并且把門鎖上,然后第二個人沒有鑰匙,那就等著,等第一個出來,然后你在拿著鑰匙進去,然后就是以此類推

實現原理

互斥性

保證同一時間只有一個客戶端可以拿到鎖,也就是可以對共享資源進行操作

安全性

只有加鎖的服務才能有解鎖權限,也就是不能讓a加的鎖,bcd都可以解鎖,如果都能解鎖那分布式鎖就沒啥意義了

可能出現的情況就是a去查詢發現持有鎖,就在準備解鎖,這時候忽然a持有的鎖過期了,然后b去獲得鎖,因為a鎖過期,b拿到鎖,這時候a繼續執行第二步進行解鎖如果不加校驗,就將b持有的鎖就給刪除了

避免死鎖

出現死鎖就會導致后續的任何服務都拿不到鎖,不能再對共享資源進行任何操作了

保證加鎖與解鎖操作是原子性操作

這個其實屬于是實現分布式鎖的問題,假設a用redis實現分布式鎖

假設加鎖操作,操作步驟分為兩步:

1,設置key set(key,value)2,給key設置過期時間

假設現在a剛實現set后,程序崩了就導致了沒給key設置過期時間就導致key一直存在就發生了死鎖

如何實現分布式鎖

實現分布式鎖的方式有很多,只要滿足上述條件的都可以實現分布式鎖,比如數據庫,redis,zookeeper,在這里就先講一下如何使用redis實現分布式鎖

分布式鎖實現的關鍵是在分布式的應用服務器外,搭建一個存儲服務器,存儲鎖信息,這時候我們很容易就想到了Redis。首先我們要搭建一個Redis服務器,用Redis服務器來存儲鎖信息。

使用redis實現分布式鎖

使用redis命令 set key value NX EX max-lock-time 實現加鎖

使用redis命令 EVAL 實現解鎖

在實現的時候要注意的幾個關鍵點:

1、鎖信息必須是會過期超時的,不能讓一個線程長期占有一個鎖而導致死鎖;

2、同一時刻只能有一個線程獲取到鎖。

幾個要用到的redis命令:

setnx(key, value):“set if not exits”,若該key-value不存在,則成功加入緩存并且返回1,否則返回0。

get(key):獲得key對應的value值,若不存在則返回nil。

getset(key, value):先獲取key對應的value值,若不存在則返回nil,然后將舊的value更新為新的value。

expire(key, seconds):設置key-value的有效期為seconds秒。

看完了這篇文章,相信你對redis分布式鎖的實現原理有了一定的了解,想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

四会市| 庐江县| 湖北省| 读书| 普洱| 白河县| 资讯| 临汾市| 保德县| 甘孜县| 桐柏县| 突泉县| 灵川县| 湘潭县| 保山市| 睢宁县| 三门峡市| 游戏| 汽车| 泉州市| 无棣县| 雷山县| 建水县| 二手房| 石嘴山市| 西青区| 青河县| 望谟县| 乳源| 中江县| 惠州市| 武隆县| 荆门市| 璧山县| 建平县| 卢龙县| 沅江市| 尚义县| 治县。| 五河县| 庄浪县|