新聞中心
NONBLOCKING LOCK,即非阻塞鎖,是在鎖競爭少的情況下,可以極大地改善系統(tǒng)性能。在多線程多服務(wù)環(huán)境中,為了保證準(zhǔn)確性,往往要給一些資源加鎖,比如臨界資源,數(shù)據(jù)庫操作,緩沖池,等等。如果在傳統(tǒng)的鎖競爭嚴重的情況下,往往會影響應(yīng)用的響應(yīng)時間和吞吐量,進而影響整體服務(wù)的穩(wěn)定性。

創(chuàng)新互聯(lián)服務(wù)項目包括偏關(guān)網(wǎng)站建設(shè)、偏關(guān)網(wǎng)站制作、偏關(guān)網(wǎng)頁制作以及偏關(guān)網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,偏關(guān)網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到偏關(guān)省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
為了解決這一問題,技術(shù)處理者會考慮采用非阻塞鎖機制。在采用非阻塞鎖的情況下,不同的線程允許并行訪問資源,而不必等待另一個線程執(zhí)行完成,從而可以顯著提高系統(tǒng)性能。
引入非阻塞鎖的一種常見方式是使用Redis,Redis是一種開源的內(nèi)存數(shù)據(jù)庫,支持實時數(shù)據(jù)存儲和讀取,為應(yīng)用提供高性能訪問。通過操作Redis實現(xiàn)可以使用更大的內(nèi)存空間來管理多個進程,且性能更強。
要實現(xiàn)基于Redis的非阻塞鎖,可以采用的一種做法是使用Redis的SETNX命令(即SET if Not eXists),即只有當(dāng)這個key不存在的時候,SETNX才會給它設(shè)置上值,否則返回失敗。
以下代碼可以使用SETNX實現(xiàn)前述非阻塞鎖:
public boolean tryLock(Jedis jedis) throws InterruptedException {
long startTime = System().currentTimeMillis();
do {
String result = jedis.set("lockKey","LOCK_VALUE","NX","EX",60);
if("OK".equals(result)) {
return true;
}
Thread.sleep(10);
} while ((System.currentTimeMillis() - startTime)
return false;
}
此外,使用Redis可以實現(xiàn)高性能的可重入鎖,也就是說,一個線程可以多次獲取同一個鎖而不會阻塞,提高了系統(tǒng)的可用程度。使用的做法是,在實現(xiàn)Redis Keys的時候,為某個線程指定對于某個資源加鎖的次數(shù),從而只有當(dāng)某個線程成功釋放了鎖,其他線程才能獲得該鎖,從而實現(xiàn)可重入鎖。
總結(jié)來看,由于Redis支持實時數(shù)據(jù)讀寫,采用Redis實現(xiàn)非阻塞鎖可以顯著提升系統(tǒng)性能,且還可以實現(xiàn)高性能的可重入鎖,為系統(tǒng)操作提供更大的穩(wěn)定性。
創(chuàng)新互聯(lián)是成都專業(yè)網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計、SEO優(yōu)化、手機網(wǎng)站、小程序開發(fā)、APP開發(fā)公司等,多年經(jīng)驗沉淀,立志成為成都網(wǎng)站建設(shè)第一品牌!
名稱欄目:NONBLOCKING鎖Redis實現(xiàn)高性能訪問控制(redis鎖是非阻塞的)
鏈接URL:http://www.5511xx.com/article/dhhephh.html


咨詢
建站咨詢
