真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

redis分布式鎖的實現(xiàn)原理

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

惠濟網(wǎng)站建設公司創(chuàng)新互聯(lián)建站,惠濟網(wǎng)站設計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為惠濟上千提供企業(yè)網(wǎng)站建設服務。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務好的惠濟做網(wǎng)站的公司定做!

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

舉個不太恰當?shù)睦樱?/strong>

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

實現(xiàn)原理

互斥性

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

安全性

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

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

避免死鎖

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

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

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

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

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

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

如何實現(xiàn)分布式鎖

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

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

使用redis實現(xiàn)分布式鎖

使用redis命令 set key value NX EX max-lock-time 實現(xiàn)加鎖

使用redis命令 EVAL 實現(xiàn)解鎖

在實現(xiàn)的時候要注意的幾個關鍵點:

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分布式鎖的實現(xiàn)原理有了一定的了解,想了解更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


新聞名稱:redis分布式鎖的實現(xiàn)原理
網(wǎng)站路徑:http://weahome.cn/article/jhgsgh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部