新聞中心
解析Redis緩存穿透:它究竟是什么?

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,鄄城企業(yè)網(wǎng)站建設,鄄城品牌網(wǎng)站建設,網(wǎng)站定制,鄄城網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,鄄城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
緩存穿透是指緩存中不存在而用戶請求的數(shù)據(jù),在數(shù)據(jù)庫中也不存在,導致每次請求都要到數(shù)據(jù)庫進行查詢,從而影響服務性能的情況。在Redis等緩存工具中,由于緩存的鍵值對有限,如果緩存中沒有所需數(shù)據(jù),會直接查詢數(shù)據(jù)庫,可能會導致數(shù)據(jù)庫因無用的查詢而崩潰。本文將詳細解析Redis緩存穿透,從原因、示例和解決方法三個方面進行分析。
1. 緩存穿透的原因
造成緩存穿透的原因主要有以下兩個。
(1)惡意攻擊:黑客惡意請求并發(fā)起攻擊,隨機查詢數(shù)據(jù)庫中不存在的假數(shù)據(jù)。
(2)數(shù)據(jù)不存在:緩存中沒有該數(shù)據(jù),而數(shù)據(jù)庫中也不存在。
無論哪個原因造成了緩存穿透,都會影響服務性能,嚴重時還會導致服務器崩潰。
2. 緩存穿透的示例
為了深入理解緩存穿透,我們來看下一個簡單的示例。
假設我們有一個請求 /user/:id,其中id的取值范圍是1到100000,即用戶共有10萬個。我們使用Redis緩存存儲用戶信息,鍵為user:id,值為用戶信息json。代碼如下:
let redis = require('redis');
let client = redis.createClient(6379, '127.0.0.1');
function getUser(id, callback) {
let key = 'user:' + id;
client.get(key, function(err, data) {
if (data !== null) {
callback(JSON.parse(data));
} else {
// 緩存中沒有該數(shù)據(jù),從數(shù)據(jù)庫中獲取
getUserFromDB(id, function(user) {
// 用戶存在,則將用戶信息加入緩存
if (user) {
client.set(key, JSON.stringify(user));
callback(user);
// 用戶不存在,則在緩存中放入一個空值,防止緩存穿透
} else {
client.set(key, '', 'EX', 100);
callback(null);
}
});
}
});
}
function getUserFromDB(id, callback) {
// 從數(shù)據(jù)庫中獲取用戶信息
//TODO
}
可以看到,如果緩存中不存在該用戶信息,以上代碼會從數(shù)據(jù)庫中查詢用戶信息,并將這個信息寫入到Redis緩存中,然后返回給用戶。如果用戶不存在,將在Redis緩存中加入一個過期時間為100秒的空數(shù)據(jù),以防止緩存穿透。
但假如黑客發(fā)起攻擊,請求一堆隨機的ID,如/user/111111、/user/222222……/user/333333。一旦Redis沒有緩存,就會去查詢數(shù)據(jù)庫。因為數(shù)據(jù)庫中也沒有這些假ID的數(shù)據(jù),無論是加入了空數(shù)據(jù)還是直接查詢數(shù)據(jù)庫,Redis和數(shù)據(jù)庫都會遭受攻擊,導致服務崩潰。
3. 解決Redis緩存穿透的方法
針對以上問題,有以下幾種方法可以解決Redis緩存穿透。
(1)緩存空對象:針對空對象攻擊的情況,可以在緩存中存儲空數(shù)據(jù),例如上面代碼中的client.set(key, ”, ‘EX’, 100)。
(2)布隆過濾器:布隆過濾器是一種判斷某個數(shù)據(jù)是否存在于某個集合中的數(shù)據(jù)結(jié)構(gòu),可以用來判斷黑名單中是否存在某個ID。如果存在,直接將請求拒絕;如果不存在,再去查詢數(shù)據(jù)庫并將結(jié)果加入到緩存中。
(3)限流措施:對于頻繁請求的IP可以設置限流措施,例如限制IP每秒最多請求幾次,再高的請求一律攔截。
結(jié)語
Redis是一款高效穩(wěn)定的緩存工具,但緩存穿透問題也常常困擾著我們。需要注意的是,惡意攻擊是緩存穿透的主要原因,所以應該加強黑名單管理,避免遭到攻擊。此外,布隆過濾器和限流措施等方法也是常用的解決方案。在使用Redis緩存時,務必要注意參數(shù)配置和安全性問題,才能讓Redis發(fā)揮最大的性能和穩(wěn)定性。
成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開發(fā)和營銷公司。廣泛應用于計算機網(wǎng)絡、設計、SEO優(yōu)化、關鍵詞排名等多種行業(yè)!
分享名稱:解析Redis緩存穿透它究竟是什么(redis緩存穿透是什么)
文章出自:http://m.fisionsoft.com.cn/article/djcesie.html


咨詢
建站咨詢
