婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 詳解redis分布式鎖的這些坑

詳解redis分布式鎖的這些坑

熱門標簽:十堰營銷電銷機器人哪家便宜 魔獸2青云地圖標注 山東外呼銷售系統(tǒng)招商 貴州電銷卡外呼系統(tǒng) 超呼電話機器人 宿遷便宜外呼系統(tǒng)平臺 日本中國地圖標注 北京400電話辦理收費標準 鄭州人工智能電銷機器人系統(tǒng)

一、白話分布式

什么是分布式,用最簡單的話來說,就是為了較低單個服務(wù)器的壓力,將功能分布在不同的機器上面,本來一個程序員可以完成一個項目:需求->設(shè)計->編碼->測試

但是項目多的時候,一個人也扛不住,這就需要不同的人進行分工合作了

這就是一個簡單的分布式協(xié)同工作了;

二、分布式鎖

首先看一個問題,如果說某個環(huán)節(jié)被終止或者別侵占,就會發(fā)生不可知的事情

這就會出現(xiàn),設(shè)計好的或者設(shè)計的半成品會被破壞,導(dǎo)致后面環(huán)節(jié)出錯;

這時候,我們就需要引入分布式鎖的概念;

何為分布式鎖

當在分布式模型下,數(shù)據(jù)只有一份(或有限制),此時需要利用鎖的技術(shù)控制某一時刻修改數(shù)據(jù)的進程數(shù)。

用一個狀態(tài)值表示鎖,對鎖的占用和釋放通過狀態(tài)值來標識。

分布式鎖的條件

  • 可以保證在分布式部署的應(yīng)用集群中,同一個方法在同一時間只能被一臺機器上的一個線程執(zhí)行。
  • 這把鎖要是一把可重入鎖(避免死鎖)
  • 這把鎖最好是一把阻塞鎖
  • 這把鎖最好是一把公平鎖
  • 有高可用的獲取鎖和釋放鎖功能
  • 獲取鎖和釋放鎖的性能要好

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

分布式鎖的實現(xiàn)由很多種,文件鎖、數(shù)據(jù)庫、redis等等,比較多,在實踐中,還是redis做分布式鎖性能會高一些;

三、redis實現(xiàn)分布式鎖

首先看兩個命令:

setnx:將 key 的值設(shè)為 value,當且僅當 key 不存在。 若給定的 key 已經(jīng)存在,則 SETNX 不做任何動作。 SETNX 是SET if Not eXists的簡寫。

127.0.0.1:6379> set lock "unlock"
OK
127.0.0.1:6379> setnx lock "unlock"
(integer) 0
127.0.0.1:6379> setnx lock "lock"
(integer) 0
127.0.0.1:6379>

expire:EXPIRE key seconds

為給定 key 設(shè)置生存時間,當 key 過期時(生存時間為 0 ),它會被自動刪除

127.0.0.1:6379> expire lock 10
(integer) 1
127.0.0.1:6379> ttl lock
8
127.0.0.1:6379> get lock
(nil)

基于分布式鎖的流程:

這就是一個簡單的分布式鎖的實現(xiàn)流程,具體代碼實現(xiàn)也很簡單,就不贅述了;

四、redis實現(xiàn)分布式鎖問題

如果出現(xiàn)了這么一個問題:如果setnx是成功的,但是expire設(shè)置失敗,那么后面如果出現(xiàn)了釋放鎖失敗的問題,那么這個鎖永遠也不會被得到,業(yè)務(wù)將被鎖死?

解決的辦法:使用set的命令,同時設(shè)置鎖和過期時間

set參數(shù):

set key value [EX seconds] [PX milliseconds] [NX|XX]

EX seconds:設(shè)置失效時長,單位秒

PX milliseconds:設(shè)置失效時長,單位毫秒

NX:key不存在時設(shè)置value,成功返回OK,失敗返回(nil)

XX:key存在時設(shè)置value,成功返回OK,失敗返回(nil)

實踐:

127.0.0.1:6379> set unlock "234" EX 100 NX
(nil)
127.0.0.1:6379> 
127.0.0.1:6379> set test "111" EX 100 NX
OK

這樣就完美的解決了分布式鎖的原子性。

五、用鎖遇到過哪些問題?又是如何解決的?未關(guān)閉資源

由于當前線程 獲取到redis 鎖,處理完業(yè)務(wù)后未及時釋放鎖,導(dǎo)致其它線程會一直嘗試獲取鎖阻塞,例如:用Jedis客戶端會報如下的錯誤信息

1redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool

redis線程池已經(jīng)沒有空閑線程來處理客戶端命令。使用原生方法記得關(guān)閉!

解決的方法也很簡單,只要我們細心一點,拿到鎖的線程處理完業(yè)務(wù)及時釋放鎖

B的鎖被A給釋放了

我們知道Redis實現(xiàn)鎖的原理在于 SETNX命令。當 key不存在時將 key的值設(shè)為 value ,返回值為 1;若給定的 key已經(jīng)存在,則 SETNX不做任何動作,返回值為 0 。

SETNX key value

我們來設(shè)想一下這個場景:A、B兩個線程來嘗試給key myLock加鎖,A線程先拿到鎖(假如鎖3秒后過期),B線程就在等待嘗試獲取鎖,到這一點毛病沒有。

那如果此時業(yè)務(wù)邏輯比較耗時,執(zhí)行時間已經(jīng)超過redis鎖過期時間,這時A線程的鎖自動釋放(刪除key),B線程檢測到myLock這個key不存在,執(zhí)行 SETNX命令也拿到了鎖。

但是,此時A線程執(zhí)行完業(yè)務(wù)邏輯之后,還是會去釋放鎖(刪除key),這就導(dǎo)致B線程的鎖被A線程給釋放了。

為避免上邊的情況,一般我們在每個線程加鎖時要帶上自己獨有的value值來標識,只釋放指定value的key,否則就會出現(xiàn)釋放鎖混亂的場景

一般我們可以設(shè)置value為業(yè)務(wù)前綴_當前線程ID或者uuid,只有當前value相同的才可以釋放鎖

鎖過期了,業(yè)務(wù)還沒執(zhí)行完

redis分布式鎖過期,而業(yè)務(wù)邏輯沒執(zhí)行完的場景,不過,這里換一種思路想問題,把redis鎖的過期時間再弄長點不就解決了嗎?

那還是有問題,我們可以在加鎖的時候,手動調(diào)長redis鎖的過期時間,可這個時間多長合適?業(yè)務(wù)邏輯的執(zhí)行時間是不可控的,調(diào)的過長又會影響操作性能。

要是redis鎖的過期時間能夠自動續(xù)期就好了。

為了解決這個問題我們使用redis客戶端redisson,redisson很好的解決了redis在分布式環(huán)境下的一些棘手問題,它的宗旨就是讓使用者減少對Redis的關(guān)注,將更多精力用在處理業(yè)務(wù)邏輯上。

redisson對分布式鎖做了很好封裝,只需調(diào)用API即可。

RLock lock = redissonClient.getLock("stockLock");

redisson在加鎖成功后,會注冊一個定時任務(wù)監(jiān)聽這個鎖,每隔10秒就去查看這個鎖,如果還持有鎖,就對過期時間進行續(xù)期。默認過期時間30秒。這個機制也被叫做:“看門狗”

redis主從復(fù)制的坑

redis高可用最常見的方案就是主從復(fù)制(master-slave),這種模式也給redis分布式鎖挖了一坑。

redis cluster集群環(huán)境下,假如現(xiàn)在A客戶端想要加鎖,它會根據(jù)路由規(guī)則選擇一臺master節(jié)點寫入key mylock,在加鎖成功后,master節(jié)點會把key異步復(fù)制給對應(yīng)的slave節(jié)點。

如果此時redis master節(jié)點宕機從節(jié)點復(fù)制失敗,為保證集群可用性,會進行主備切換,slave變?yōu)榱藃edis master。B客戶端在新的master節(jié)點上加鎖成功,而A客戶端也以為自己還是成功加了鎖的。另外如果主從復(fù)制延遲同樣也會造成加鎖和解鎖延遲的問題。

此時就會導(dǎo)致同一時間內(nèi)多個客戶端對一個分布式鎖完成了加鎖,導(dǎo)致各種臟數(shù)據(jù)的產(chǎn)生。

畢竟redis是保持的AP而非CP,如果要追求強一致性可以使用zookeeper分布式鎖。

以上就是詳解redis分布式鎖的這些坑的詳細內(nèi)容,更多關(guān)于redis分布式鎖的這些坑的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 基于Redis實現(xiàn)分布式鎖的方法(lua腳本版)
  • SpringBoot之使用Redis實現(xiàn)分布式鎖(秒殺系統(tǒng))
  • 詳解Redis 分布式鎖遇到的序列化問題
  • 詳解RedisTemplate下Redis分布式鎖引發(fā)的系列問題
  • redisson分布式鎖的用法大全
  • php基于redis的分布式鎖實例詳解
  • Redis分布式鎖升級版RedLock及SpringBoot實現(xiàn)方法
  • 利用redis實現(xiàn)分布式鎖,快速解決高并發(fā)時的線程安全問題
  • 詳解基于redis實現(xiàn)分布式鎖

標簽:吉安 朝陽 江蘇 北京 楊凌 果洛 臺州 大慶

巨人網(wǎng)絡(luò)通訊聲明:本文標題《詳解redis分布式鎖的這些坑》,本文關(guān)鍵詞  詳解,redis,分布式,鎖,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解redis分布式鎖的這些坑》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解redis分布式鎖的這些坑的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91九色最新地址| 秋霞成人午夜伦在线观看| 日韩三级在线观看| 精品国产一区二区国模嫣然| 欧美α欧美αv大片| 自拍偷自拍亚洲精品播放| 亚洲欧洲一区二区在线播放| 欧美大尺度电影在线| 欧美a级一区二区| 国产丝袜美腿一区二区三区| 日韩你懂的电影在线观看| 国产午夜亚洲精品羞羞网站| 亚洲国产精品久久人人爱 | 在线观看国产一区二区| 精品国产一区久久| 一区二区三区免费看视频| 亚洲精品一卡二卡| 国产麻豆9l精品三级站| 91精品国产综合久久香蕉麻豆 | 亚洲人午夜精品天堂一二香蕉| 久久色在线观看| 色一区在线观看| 亚洲成在人线免费| 久久超碰97中文字幕| 亚洲人成亚洲人成在线观看图片 | 综合自拍亚洲综合图不卡区| 亚洲欧美经典视频| 国产三区在线成人av| 精品视频一区二区不卡| 欧美日韩在线播| 51午夜精品国产| 欧美探花视频资源| 亚洲一区二区三区四区在线免费观看| 6080yy午夜一二三区久久| 欧美自拍偷拍午夜视频| 欧美老人xxxx18| 亚洲欧洲精品成人久久奇米网| 亚洲精品国产视频| 男人操女人的视频在线观看欧美| 26uuu色噜噜精品一区| 成人动漫精品一区二区| 国产98色在线|日韩| 欧美三级在线视频| 99久久综合99久久综合网站| 中文字幕在线免费不卡| 欧美视频日韩视频| 国产盗摄女厕一区二区三区| 国产一区二区三区黄视频 | 欧美日韩一区不卡| 中文字幕一区二区不卡| 欧美一级一级性生活免费录像| 大白屁股一区二区视频| 欧美高清一级片在线观看| 91精品国产色综合久久不卡蜜臀| 亚洲日本在线a| 亚洲人成精品久久久久| 色婷婷久久久亚洲一区二区三区| 精品国产露脸精彩对白| 91看片淫黄大片一级在线观看| 国产99久久久精品| 亚洲国产精品自拍| 日韩电影在线看| 精品视频一区三区九区| 亚洲高清久久久| www日韩大片| 欧美综合一区二区三区| 91论坛在线播放| 国产精品99久久久久久久女警| 久久天天做天天爱综合色| 狠狠色狠狠色综合系列| 成人精品gif动图一区| 国产精品天干天干在观线| 欧美在线一区二区三区| 国产欧美久久久精品影院| av电影一区二区| 91网站在线播放| 久久精品国产亚洲高清剧情介绍| 亚洲综合激情网| 日本va欧美va精品发布| 欧美精品在线观看播放| eeuss国产一区二区三区| 国产农村妇女毛片精品久久麻豆 | 91久久精品国产91性色tv| 国产麻豆精品95视频| 蜜臀av性久久久久蜜臀aⅴ四虎| 丰满少妇久久久久久久| 日韩欧美一区二区在线视频| 久久―日本道色综合久久| 亚洲动漫第一页| 欧美电影在线免费观看| 亚洲国产精品精华液ab| 国精产品一区一区三区mba视频 | 亚洲国产精品久久一线不卡| 国产美女娇喘av呻吟久久| 欧美视频一区二| 日本欧美在线看| 国产欧美视频在线观看| 国产99一区视频免费| 久久久午夜精品理论片中文字幕| 日本成人在线不卡视频| 一本色道**综合亚洲精品蜜桃冫| 国产色爱av资源综合区| 秋霞电影一区二区| 欧美日韩精品一二三区| 狠狠色狠狠色综合| 国产欧美一区二区精品性| 91免费版在线看| 日本不卡免费在线视频| 国产精品乱码久久久久久| 91蜜桃网址入口| 青青草成人在线观看| 亚洲美女少妇撒尿| 国产日本欧美一区二区| 制服视频三区第一页精品| www.色精品| 国产伦精品一区二区三区视频青涩| 亚洲精品国产品国语在线app| 久久影院午夜片一区| 日韩视频在线永久播放| 成人高清伦理免费影院在线观看| 亚洲人xxxx| 中文字幕在线一区| 久久久综合网站| 色婷婷av一区二区三区软件| 蜜桃av噜噜一区二区三区小说| 在线视频一区二区免费| 国产伦精品一区二区三区免费| 国产欧美一二三区| 在线成人免费观看| 欧美三级中文字| 欧美日韩在线播放一区| 国产精品亚洲综合一区在线观看| 亚洲国产成人高清精品| 久久精品亚洲麻豆av一区二区 | 国产精品国产三级国产aⅴ中文| 欧美日韩三级在线| 色婷婷综合久久| 国产精品一级片| 成人h精品动漫一区二区三区| 成人美女视频在线观看| 日本中文字幕一区二区有限公司| 亚洲三级在线播放| 国产精品日韩成人| 欧美一区二区三区公司| 欧美精品v国产精品v日韩精品| 成人免费三级在线| 成人丝袜18视频在线观看| 97久久人人超碰| 欧美日韩在线精品一区二区三区激情| 欧美日韩大陆一区二区| 2020国产精品久久精品美国| 亚洲男人电影天堂| 国产乱子轮精品视频| 91在线观看一区二区| 欧美三级在线看| 麻豆一区二区三区| 91久久香蕉国产日韩欧美9色| 日韩三级免费观看| 天堂av在线一区| 色综合天天综合网国产成人综合天 | 亚洲国产精品av| 久久国内精品自在自线400部| 黑人巨大精品欧美黑白配亚洲 | 91黄色小视频| 国产午夜精品一区二区 | 久久综合一区二区| 激情五月婷婷综合| 欧美一区二区三区思思人| 亚洲成av人影院在线观看网| 欧美午夜视频网站| 日韩精品91亚洲二区在线观看| 欧美日韩中字一区| 亚洲欧美一区二区三区极速播放| av中文字幕亚洲| 亚洲一区二区三区四区在线免费观看| 成人免费观看视频| 日本不卡一区二区三区高清视频| 欧美另类久久久品| 成人福利视频在线看| 亚洲视频小说图片| 欧美一区二区三区免费视频| 国产资源在线一区| 亚洲黄色免费电影| 久久综合精品国产一区二区三区| 国产精品一二三四区| 中文字幕一区二区三区四区不卡| 91成人网在线| 视频一区视频二区在线观看| 久久精品亚洲精品国产欧美kt∨| 精品视频在线免费看| 国产99久久久国产精品免费看| 亚洲精品免费在线观看| 精品福利在线导航| 欧美在线高清视频| 91国偷自产一区二区开放时间 | 免费av成人在线| 亚洲色图.com| 久久九九99视频| 国产欧美一区二区精品秋霞影院 | 成人黄色小视频在线观看|