新聞中心
紅色寶石原理:一張緩存穿透演示圖解

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:做網(wǎng)站、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的延安網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
近年來(lái),隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,緩存技術(shù)也逐漸成為了網(wǎng)絡(luò)應(yīng)用的重要技術(shù)之一。然而,在實(shí)際應(yīng)用中,緩存穿透問(wèn)題經(jīng)常出現(xiàn),給網(wǎng)站帶來(lái)一定程度的影響。為了更好地了解緩存穿透問(wèn)題,本文將以紅色寶石原理為例,通過(guò)一張緩存穿透演示圖解,讓讀者更好地理解緩存穿透問(wèn)題和解決方法。
1. 緩存穿透問(wèn)題
緩存穿透是指查詢一個(gè)不存在的數(shù)據(jù),由于緩存中沒有,所以不得不去存儲(chǔ)中查詢,這樣的查詢很可能會(huì)導(dǎo)致存儲(chǔ)層面的壓力增大,甚至觸發(fā)緩存雪崩。穿透發(fā)生的情況如下圖所示:

從圖中可以看出,某個(gè)用戶請(qǐng)求了一個(gè)不存在的數(shù)據(jù),導(dǎo)致壓力直接傳遞到存儲(chǔ)層,由于存儲(chǔ)層無(wú)法命中緩存,所以需要去查找數(shù)據(jù)庫(kù),這樣的查詢過(guò)程會(huì)導(dǎo)致大量的數(shù)據(jù)庫(kù)查詢請(qǐng)求,嚴(yán)重影響系統(tǒng)的性能。為了解決緩存穿透問(wèn)題,我們需要使用布隆過(guò)濾器來(lái)過(guò)濾掉一些不存在的數(shù)據(jù)請(qǐng)求,避免過(guò)多的查詢請(qǐng)求。
2. 紅色寶石原理
紅色寶石原理是一種緩存穿透的解決方案,主要利用布隆過(guò)濾器進(jìn)行過(guò)濾。其流程如下:

用戶發(fā)送數(shù)據(jù)請(qǐng)求到系統(tǒng),系統(tǒng)首先從緩存中查詢,如果緩存中沒有命中,則去布隆過(guò)濾器查詢是否是一個(gè)不存在的數(shù)據(jù)。如果布隆過(guò)濾器返回不存在,則直接返回給用戶不存在,否則繼續(xù)向存儲(chǔ)層進(jìn)行查詢。如果存儲(chǔ)層返回了數(shù)據(jù),則更新緩存和布隆過(guò)濾器。
紅色寶石原理的代碼實(shí)現(xiàn)如下:
“`java
public class RedisBloomFilter {
private Jedis jedis;
private BloomFilter bloomFilter;
private int expectedSize = 1000000;
private double fpp = 0.01;
private String key = “bloom_filter”;
public RedisBloomFilter() {
jedis = new Jedis(“l(fā)ocalhost”);
jedis.auth(“password”);
jedis.select(0);
long numBits = BloomFilterOptimalNum.numOfBits(expectedSize, fpp);
int numHashFunctions = BloomFilterOptimalNum.numOfHashFunctions(numBits, expectedSize);
bloomFilter = new BloomFilter(numBits, numHashFunctions);
}
public boolean isExist(String data) {
if (bloomFilter.contns(data)) {
return true;
}
if (jedis.get(key) != null) {
bloomFilter.deserialize(jedis.get(key).getBytes());
if (bloomFilter.contns(data)) {
return true;
}
}
return false;
}
public void add(String data) {
bloomFilter.add(data);
jedis.set(key, new String(bloomFilter.serialize()));
}
}
3. 緩存穿透演示圖解
下面是一張緩存穿透演示圖,通過(guò)這張圖可以真實(shí)地模擬出緩存穿透的情況以及紅色寶石原理的解決方案。

從圖中可以看出,用戶請(qǐng)求一個(gè)不存在的數(shù)據(jù)編號(hào),根據(jù)紅色寶石原理,系統(tǒng)首先從布隆過(guò)濾器中查詢是否是一個(gè)不存在的數(shù)據(jù)。由于該數(shù)據(jù)編號(hào)并不在布隆過(guò)濾器中,所以直接返回不存在給用戶,避免了需要去存儲(chǔ)層查詢的情況,從而減少了存儲(chǔ)層的負(fù)載。
4. 總結(jié)
通過(guò)本文的圖解,我們可以更加深入地了解緩存穿透問(wèn)題和解決方案。在實(shí)際應(yīng)用中,我們需要選擇合適的布隆過(guò)濾器來(lái)避免緩存穿透問(wèn)題,并且在進(jìn)行緩存設(shè)計(jì)時(shí)需要考慮到布隆過(guò)濾器的使用,避免出現(xiàn)一些不必要的問(wèn)題。
成都創(chuàng)新互聯(lián)建站主營(yíng):成都網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、網(wǎng)站改版的網(wǎng)站建設(shè)公司,提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、成都網(wǎng)站推廣、成都網(wǎng)站優(yōu)化seo、響應(yīng)式移動(dòng)網(wǎng)站開發(fā)制作等網(wǎng)站服務(wù)。
分享名稱:紅色寶石原理一張緩存穿透演示圖解(redis緩存穿透圖解)
轉(zhuǎn)載來(lái)源:http://m.5511xx.com/article/djsgiod.html


咨詢
建站咨詢
