新聞中心
問題

隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,企業(yè)以及各行業(yè)都離不開互聯(lián)網(wǎng)的支持,在移動(dòng)化的交互過程中,信息的安全性也同樣重要??紤]到競(jìng)爭(zhēng)環(huán)境中數(shù)據(jù)庫的高并發(fā)讀寫情況,為了防止數(shù)據(jù)混亂,各企業(yè)基本都采取的數(shù)據(jù)庫的鎖的機(jī)制來保護(hù)數(shù)據(jù)安全性。
Redis鎖又稱分布式鎖,是一種解決網(wǎng)絡(luò)編程中典型的“訪問沖突”問題的分布式環(huán)境下的一種鎖定服務(wù)。它可以防止多個(gè)客戶端同時(shí)對(duì)同一資源進(jìn)行競(jìng)爭(zhēng)搶占,從而導(dǎo)致數(shù)據(jù)混亂或沖突。由于Redis鎖對(duì)數(shù)據(jù)庫多線程安全性有很大的改善,使得Redis鎖受到很多企業(yè)的青睞。
但是也存在一定的弊端,由于Redis鎖在網(wǎng)絡(luò)上運(yùn)行,在競(jìng)爭(zhēng)環(huán)境中存在雙重獲取的可能性,兩個(gè)不同的客戶端同時(shí)得到一個(gè)鎖。有關(guān)Redis鎖的雙重獲取問題,已經(jīng)有十分優(yōu)秀的解決方案:采用watch-lock機(jī)制,即更新前對(duì)當(dāng)前鎖進(jìn)行監(jiān)聽,如果在監(jiān)視到更新前狀態(tài)發(fā)生變化,則可以立即發(fā)現(xiàn),從而獲得雙重獲取問題的解決。
以Java編碼實(shí)現(xiàn)watch-lock機(jī)制:
Jedis jedis = new Jedis(“127.0.0.1”,6379);
jedis.watch(“abc”,key);
String value = jedis.get(“abc”);
// 把上一次讀取的數(shù)據(jù)和現(xiàn)在獲取的數(shù)據(jù)對(duì)比
if(value.equals(“old-data”)){
Transaction tx = jedis.multi();
tx.set(“abc”, newData);
tx.exec();
}
從上面的示例中可以看出,通過watch-lock機(jī)制,如果有多臺(tái)機(jī)器同時(shí)獲取同一鎖資源,當(dāng)一臺(tái)機(jī)器更新前會(huì)立即發(fā)現(xiàn),從而防止數(shù)據(jù)混亂,相應(yīng)地處理競(jìng)爭(zhēng)環(huán)境中Redis鎖的雙重獲取問題。
總結(jié)而言,Redis鎖是保護(hù)數(shù)據(jù)安全性的有效方法,但是當(dāng)Redis鎖處于競(jìng)爭(zhēng)環(huán)境時(shí),可能存在雙重獲取的問題,這時(shí)需要采取的措施,最有效的措施是watch-lock機(jī)制。
成都網(wǎng)站建設(shè)選創(chuàng)新互聯(lián)(?:028-86922220),專業(yè)從事成都網(wǎng)站制作設(shè)計(jì),高端小程序APP定制開發(fā),成都網(wǎng)絡(luò)營(yíng)銷推廣等一站式服務(wù)。
網(wǎng)站標(biāo)題:競(jìng)爭(zhēng)環(huán)境中Redis鎖的雙重獲?。╮edis鎖同時(shí)獲?。?
瀏覽路徑:http://fisionsoft.com.cn/article/dhdsjdg.html


咨詢
建站咨詢
