新聞中心
樂觀鎖在Redis中的實(shí)現(xiàn)

Redis是一種高性能的內(nèi)存型鍵值對存儲系統(tǒng),由開源社區(qū)在BSD許可下持續(xù)開發(fā)和維護(hù)。Redis支持復(fù)雜的數(shù)據(jù)類型,如列表,集合,有序集合,哈希表等,并且支持事務(wù),樂觀鎖,數(shù)據(jù)分庫等功能。在介紹Redis樂觀鎖之前,先了解一下樂觀鎖概念,樂觀鎖也稱為無鎖,是一種數(shù)據(jù)庫上使用的一種大致的策略,優(yōu)點(diǎn)是不對性能進(jìn)行太多的降低,缺點(diǎn)是由于某些情況會導(dǎo)致數(shù)據(jù)出錯。
Redis樂觀鎖利用setnx(set if not exist) (SET IF NOT EXIST) 事務(wù)支持去實(shí)現(xiàn),如果KEY不存在,則可以設(shè)置成功,否則可以判斷失敗。Redis樂觀鎖的具體實(shí)現(xiàn):
//首先構(gòu)造條件
String sessionId="ID-1234";
//String key=sessionId;
String key="lockKey"+sessionId;
int value=0;
//Random random=new Random();
//int temp = random.nextInt(100000);
//定義超時(shí)時(shí)間
int timeout=100;
long startTime=System.nanoTime();
//開啟事務(wù)
redis.multi();
//設(shè)置key的值,如果不存在則設(shè)置成功
redis.setnx(key, value);
//設(shè)置key的過期時(shí)間
redis.expire(key, timeout);
//提交事務(wù)
redis.exec();
//加鎖成功
if(redis.get(key) .equals (value) ){
//業(yè)務(wù)操作
}else {//加鎖失敗
if(System.nanoTime()-startTime
//嘗試重新加鎖
}else{
//超時(shí)失敗
}
}
//釋放鎖
redis.del(key);
上面就是Redis實(shí)現(xiàn)樂觀鎖的基本步驟,其中設(shè)置key的值與獲取key的值是使用setnx(set if not exist)事務(wù)去實(shí)現(xiàn),還可以使用watch命令來實(shí)現(xiàn)樂觀鎖,使用watch更加簡單,但同樣局限于事務(wù)環(huán)境下。希望上述介紹對您有所幫助。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
標(biāo)題名稱:樂觀鎖在redis中的實(shí)現(xiàn)(樂觀鎖和redis)
網(wǎng)站URL:http://www.5511xx.com/article/dhpgcge.html


咨詢
建站咨詢
