數(shù)據(jù)穿透是什么?
緩存穿透:緩存和數(shù)據(jù)庫中都沒有的數(shù)據(jù),而用戶(黑客)不斷發(fā)起請求。
例子
我們數(shù)據(jù)庫的 id 都是從 1 自增的,如果發(fā)起 id=-1 的數(shù)據(jù)或者 id 特別大不存在的數(shù)據(jù),這樣的不斷攻擊導(dǎo)致數(shù)據(jù)庫壓力很大,嚴重會擊垮數(shù)據(jù)庫。
解決
1)增加校驗。比如用戶鑒權(quán),參數(shù)做校驗,不合法的校驗直接 return,比如 id 做基礎(chǔ)校驗,id<=0 直接攔截;
2)布隆過濾器。Redis 里還有一個高級用法布隆過濾器(Bloom Filter)這個也能很好的預(yù)防緩存穿透的發(fā)生。
它的原理也很簡單,就是利用高效的數(shù)據(jù)結(jié)構(gòu)和算法快速判斷出你這個 Key 是否在數(shù)據(jù)庫中存在,不存在你 return 就好了,存在你就去查 DB 刷新 KV 再 return。