新聞中心
Redis(Remote Dictionary Server)是一種流行的 NoSQL 數(shù)據(jù)庫(kù),它可以存儲(chǔ) KEY-value 鍵值對(duì)數(shù)據(jù),是很多應(yīng)用場(chǎng)景中,使用頻率極高的第三方數(shù)據(jù)存儲(chǔ)方式。

我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、蘆溪ssl等。為超過(guò)千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的蘆溪網(wǎng)站制作公司
對(duì)于分布式系統(tǒng)而言,在多線程競(jìng)爭(zhēng)、多線程服務(wù),和分布式計(jì)算等場(chǎng)景,為了控制正常請(qǐng)求與容錯(cuò)請(qǐng)求之間的可重入性和沖突性,都會(huì)用到 Redis 鎖,這也是 Redis 服務(wù)的一種較為重要的擴(kuò)展功能,使其在分布式系統(tǒng)應(yīng)用中常常被評(píng)論為「鎖和鏡像」。
Redis 鎖通過(guò)加鎖和解鎖來(lái)實(shí)現(xiàn)多線程共享數(shù)據(jù),以避免多線程操作中出現(xiàn)數(shù)據(jù)沖突。其實(shí)現(xiàn)機(jī)制是,Redis 服務(wù)器中創(chuàng)建一個(gè) key 值作為相互交互的標(biāo)記,當(dāng)服務(wù)器端收到客戶端請(qǐng)求時(shí),用 get 來(lái)嘗試獲取該key值,如果返回結(jié)果是空,那么請(qǐng)求的線程將可以成功獲取到key值,此時(shí)表示已經(jīng)獲取鎖,然后使用 setnx 來(lái)設(shè)置標(biāo)記的 key 值,這樣其他的請(qǐng)求線程就不會(huì)成功獲取到同一個(gè)key值;當(dāng)獲取鎖之后,想要解鎖,只要調(diào)用 delnx 方法來(lái)刪除該key值,就表示本線程已經(jīng)解鎖,下一個(gè)線程可以繼續(xù)嘗試獲取鎖。
實(shí)現(xiàn)Redis 鎖就需要以下步驟,將以下步驟放到一個(gè)函數(shù)中:
// 嘗試獲取鎖
function tryLockByRedis($lockname, $clientId, $expireTime) {
//判斷是否設(shè)置失敗
$isLock = Redis::get($lockName);
if($isLock == false) {
//若未設(shè)置,則把當(dāng)前客戶端的clientId作為鎖的關(guān)聯(lián)id
Redis::setnx($lockName, $clientId, $expireTime);
return true;
}
//若設(shè)置成功,比較鎖的關(guān)聯(lián)id是否是自己的id
if($isLock == $clientId){
//自己的鎖過(guò)期已經(jīng)過(guò)期,則可解鎖
Redis::set($lockName, true, $expireTime);
return true;
}
return false;
}
//解鎖
function unLockByRedis($lockName, $clientId){
$isLock = Redis::get($lockName);
if($isLock == $clientId) {
//刪除key
Redis::del($lockName);
return true;
}
return false;
}
Redis 鎖是一種可以使分布式系統(tǒng)在高性能的情況下快速、安全的保障正常請(qǐng)求和容錯(cuò)請(qǐng)求之間的可重入性和沖突性的一種機(jī)制,為大批量的分布式應(yīng)用提供了良好的保障支持。它也為提升分布式應(yīng)用的擴(kuò)展性和可重入性提供了更有力的保障。
成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過(guò)多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開(kāi)發(fā)和營(yíng)銷公司。廣泛應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)、設(shè)計(jì)、SEO優(yōu)化、關(guān)鍵詞排名等多種行業(yè)!
分享標(biāo)題:Redis鎖快速安全的保障(redis鎖結(jié)構(gòu))
文章源于:http://www.5511xx.com/article/ccdphcs.html


咨詢
建站咨詢
