日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Redis鎖實(shí)現(xiàn)性能優(yōu)化(redis鎖提升性能)

Redis(Remote Dictionary Server) 是一個(gè)非常流行的基于內(nèi)存的高性能鍵值數(shù)據(jù)庫,它的特性提供了非常多的的性能優(yōu)化的可能,其中一種性能優(yōu)化就是利用Redis實(shí)現(xiàn)鎖來實(shí)現(xiàn)性能優(yōu)化。

站在用戶的角度思考問題,與客戶深入溝通,找到九江網(wǎng)站設(shè)計(jì)與九江網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋九江地區(qū)。

Redis鎖的原理很簡單,假設(shè)當(dāng)前線程A要訪問一個(gè)共享資源時(shí),它首先會在Redis中查找指定的KEY,如果此KEY不存在,則表示暫時(shí)沒有線程訪問此資源,當(dāng)前線程A可以訪問這個(gè)共享資源,訪問完成后,線程A會將這個(gè)KEY保存在Redis中,同時(shí)設(shè)置這個(gè)KEY的過期時(shí)間。其他線程訪問時(shí),則會去檢查該KEY是否存在,如果存在,則表示線程A正在訪問,線程其他線程只能等待;如果KEY不存在,則表示該資源可以訪問,當(dāng)前線程可以進(jìn)行訪問。

示例代碼:

public static string getLock(String lockName,long timeout){
StringBuilder sb = new StringBuilder();
sb.append("lock_");
sb.append(lockName);
String lockKey = sb.toString();
//設(shè)置加鎖的過期時(shí)間,防止死鎖的產(chǎn)生
long lockExpire = timeout / 1000 + 1;
long currentTimeMillis = System.currentTimeMillis() + timeout;
//獲取鎖
boolean exists = (boolean) redisTemplate.execute(new RedisCallback() {
@Override
public Boolean doInRedis(RedisConnection redisConnection) throws DataAccessException {
return redisConnection.setNX(lockKey.getBytes(), String.valueOf(currentTimeMillis).getBytes());
}
});
if (exists){
redisTemplate.execute(new RedisCallback() {
@Override
public Long doInRedis(RedisConnection redisConnection) throws DataAccessException {
return redisConnection.expire(lockKey.getBytes(), lockExpire);
}
});
}else {
String oldTime = new String((byte[]) redisTemplate.execute(new RedisCallback() {
@Override
public Object doInRedis(RedisConnection redisConnection) throws DataAccessException {
return redisConnection.get(lockKey.getBytes());
}
}));
if (oldTime == null)
getLock(lockName,timeout);
else {
currentTimeMillis = Long.valueOf(oldTime);
if (currentTimeMillis
//獲取上一個(gè)鎖的時(shí)間,否則判斷為失效
String oldVal = (String) redisTemplate.opsForValue().getAndSet(lockKey,String.valueOf(currentTimeMillis));
if (oldVal != null && oldVal.equals(oldTime))
return sb.toString();
else
return getLock(lockName,timeout);
}else {
return getLock(lockName,timeout);
}
}

}
return sb.toString();
}

上面所示就是一段Redis鎖實(shí)現(xiàn)性能優(yōu)化的代碼,使用Redis可以大大減少獲取鎖的大等待開銷,同時(shí)可以支持多線程多臺服務(wù)器等情況下也能保證資源共享的性能安全。除了性能優(yōu)化,Redis配合Cache還可以有效的提高系統(tǒng)的整體性能,改善用戶體驗(yàn)等。

Redis鎖實(shí)現(xiàn)性能優(yōu)化的方式有利于提升系統(tǒng)的性能,但在使用的過程中也要注意避免出現(xiàn)死鎖的情況,從而保證系統(tǒng)的正常運(yùn)行。

成都服務(wù)器租用選創(chuàng)新互聯(lián),先試用再開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)提供簡單好用,價(jià)格厚道的香港/美國云服務(wù)器和獨(dú)立服務(wù)器。物理服務(wù)器托管租用:四川成都、綿陽、重慶、貴陽機(jī)房服務(wù)器托管租用。


網(wǎng)站名稱:Redis鎖實(shí)現(xiàn)性能優(yōu)化(redis鎖提升性能)
網(wǎng)站地址:http://www.dlmjj.cn/article/ccespjg.html