日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Redis分布式鎖應(yīng)用(實現(xiàn)+原理)
在分布式系統(tǒng)中,當(dāng)不同進程或線程一起訪問共享資源時,會造成資源爭搶,如果不加以控制的話,就會引發(fā)程序錯亂。此時使用分布式鎖能夠非常有效的解決這個問題,它采用了一種互斥機制來防止線程或進程間相互干擾,從而保證了數(shù)據(jù)的一致性。

提示:如果對分布式系統(tǒng)這一概念不清楚,可參考百度百科《分布式系統(tǒng)》,簡而言之,它是一種架構(gòu)、一種模式。

Redis分布式鎖介紹

分布式鎖并非是 Redis 獨有,比如 MySQL 關(guān)系型數(shù)據(jù)庫,以及 Zookeeper 分布式服務(wù)應(yīng)用,它們都實現(xiàn)分布式鎖,只不過 Redis 是基于緩存實現(xiàn)的。

Redis 分布式鎖有很對應(yīng)用場景,舉個簡單的例子,比如春運時,您需要在 12306 上搶購回家火車票,但 Redis 數(shù)據(jù)庫中只剩一張票了,此時有多個用戶來預(yù)訂購買,那么這張票會被誰搶走呢?Redis 服務(wù)器又是如何處理這種情景的呢?在這個過程中就需要使用分布式鎖。

Redis 分布式鎖主要有以下特點:

  • 第一:互斥性是分布式鎖的重要特點,在任意時刻,只有一個線程能夠持有鎖;
  • 第二:鎖的超時時間,一個線程在持鎖期間掛掉了而沒主動釋放鎖,此時通過超時時間來保證該線程在超時后可以釋放鎖,這樣其他線程才可以繼續(xù)獲取鎖;
  • 第三:加鎖和解鎖必須是由同一個線程來設(shè)置;
  • 第四:Redis 是緩存型數(shù)據(jù)庫,擁有很高的性能,因此加鎖和釋放鎖開銷較小,并且能夠很輕易地實現(xiàn)分布式鎖。

注意:一個線程代表一個客戶端。

Redis分布式鎖命令

分布式鎖的本質(zhì)其實就是要在 Redis 里面占一個“坑”,當(dāng)別的進程也要來占時,發(fā)現(xiàn)已經(jīng)有人蹲了,就只好放棄或者稍做等待。這個“坑”同一時刻只允許被一個客戶端占據(jù),也就是本著“先來先占”的原則。

1) 常用命令

Redis 分布式鎖常用命令如下所示:

  • SETNX key val:僅當(dāng)key不存在時,設(shè)置一個 key 為 value 的字符串,返回1;若 key 存在,設(shè)置失敗,返回 0;
  • Expire key timeout:為 key 設(shè)置一個超時時間,以 second 秒為單位,超過這個時間鎖會自動釋放,避免死鎖;
  • DEL key:刪除 key。

上述 SETNX 命令相當(dāng)于占“坑”操作,EXPIRE 是為避免出現(xiàn)意外用來設(shè)置鎖的過期時間,也就是說到了指定的過期時間,該客戶端必須讓出鎖,讓其他客戶端去持有。

但還有一種情況,如果在 SETNX 和 EXPIRE 之間服務(wù)器進程突然掛掉,也就是還未設(shè)置過期時間,這樣就會導(dǎo)致 EXPIRE 執(zhí)行不了,因此還是會造成“死鎖”的問題。為了避免這個問題,Redis 作者在 2.6.12 版本后,對 SET 命令參數(shù)做了擴展,使它可以同時執(zhí)行 SETNX 和 EXPIRE 命令,從而解決了死鎖的問題。

直接使用 SET 命令實現(xiàn),語法格式如下:

SET key value [expiration EX seconds|PX milliseconds] [NX|XX]  
  • EX second:設(shè)置鍵的過期時間為 second 秒。 SET key value EX second 效果等同于 SETEX key second value 。
  • PX millisecond:設(shè)置鍵的過期時間為毫秒。SET key value PX millisecond 效果等同于 PSETEX key millisecondvalue 。
  • NX:只在鍵不存在時,才對鍵進行設(shè)置操作。 SET key value NX 效果等同于 SETNX key value 。
  • XX:只在鍵已經(jīng)存在時,才對鍵進行設(shè)置操作。

2) 命令應(yīng)用

下面進行簡單的命令演示:

127.0.0.1:6379> SETNX WEBNAME www.biancheng.net
(integer) 1
127.0.0.1:6379> EXPIRE WEBNAME 60
(integer) 1
127.0.0.1:6379> GET WEBNAME
"www.biancheng.net"
127.0.0.1:6379> TTL WEBNAME
(integer) 33
127.0.0.1:6379> SET name www.biancheng.net EX 60 NX
OK

當(dāng)前文章:Redis分布式鎖應(yīng)用(實現(xiàn)+原理)
URL標(biāo)題:http://www.5511xx.com/article/dhcddod.html