2哥:3妹厉碟,這么晚了還不睡覺啊,在干嘛呢屠缭。
3妹:在學(xué)習(xí)呢箍鼓,白天上班比較忙,只能在晚上的時(shí)間看會兒書了呵曹。
2哥:3妹加油款咖,你盡早也會成為你羨慕的大牛的。
3妹:哈哈奄喂,多謝2哥铐殃。2哥,考考你跨新,你知道redis為什么性能這么高嗎富腊?
2哥:這個不難,之前我也研究地域帐,因?yàn)槭腔趦?nèi)存赘被、單線程、多路復(fù)用肖揣、特殊的數(shù)據(jù)結(jié)構(gòu)等民假。
3妹:哇,2哥厲害龙优,再給我講講唄羊异。
2哥:行啊,不過說好陋率,講完就要睡覺了球化,熬夜對身體不好。身體是革命的本錢啊瓦糟。
3妹:好的好的~
如何解決Redis緩存穿透問題筒愚?
Redis 緩存穿透指的是攻擊者故意大量請求一些Redis緩存中不存在key的數(shù)據(jù),導(dǎo)致請 求打到數(shù)據(jù)庫上菩浙,導(dǎo)致數(shù)據(jù)庫壓力過大巢掺。
解決方案如下:
1.做好參數(shù)校驗(yàn)句伶,無效的請求直接返回,只能避免一部分情況陆淀,攻擊者總是可以找到一些沒有覆蓋的情況考余。
2.對緩存中找不到的key,需要去數(shù)據(jù)庫查找的key轧苫,緩存到Redis中楚堤,但是可能會導(dǎo)致Redis中緩存大量無效的key,可以設(shè)置一個很短的過期時(shí)間含懊,例如1分鐘身冬。
3.也可以使用布隆過濾器,將所有可能的存在的數(shù)據(jù)通過去hash值的方式存入到一個足夠大的bitmap中去岔乔,處理請求時(shí)酥筝,通過在bitmap中查找,可以將不存在的數(shù)據(jù)攔截掉雏门。
如何解決Redis緩存擊穿問題嘿歌?
緩存擊穿主要指的是某個熱點(diǎn)key失效,導(dǎo)致大量請求全部轉(zhuǎn)向數(shù)據(jù)庫茁影,導(dǎo)致數(shù)據(jù)庫壓力過大宙帝。
解決方案如下 :
1.對熱點(diǎn)key設(shè)置永不過期。
2.加互斥鎖呼胚,緩存中沒有熱點(diǎn)key對應(yīng)的數(shù)據(jù)時(shí)茄唐,等待100ms,由獲得鎖的線程去讀取數(shù)據(jù)庫然后設(shè)置緩存蝇更。
如何解決Redis緩存雪崩問題沪编?
緩存雪崩主要指的是短時(shí)間內(nèi)大量key失效,導(dǎo)致所有請求全部轉(zhuǎn)向數(shù)據(jù)庫年扩,導(dǎo)致數(shù)據(jù)庫壓力過大蚁廓。
解決方案如下 :
1.在給緩存設(shè)置失效時(shí)間時(shí)加一個隨機(jī)值,避免集體失效厨幻。
2.雙緩存機(jī)制相嵌,緩存A的失效時(shí)間為20分鐘,緩存B的失效時(shí)間會比A長一些况脆,從緩存A讀取數(shù)據(jù)饭宾,緩存A中沒有時(shí),去緩存B中讀取數(shù)據(jù)格了,并且啟動一個異步線程來更新緩存A(如果已經(jīng)有異步線程正在更新了看铆,就不用重復(fù)更新了)。以及更新緩存B盛末,以便延遲B的過期時(shí)間弹惦。
相關(guān)閱讀
1.Redis概述 http://www.reibang.com/p/41619e4a00b1
2.Redis的底層數(shù)據(jù)結(jié)構(gòu) http://www.reibang.com/p/f74697b90a4e
3.Redis的過期策略和內(nèi)存淘汰機(jī)制 http://www.reibang.com/p/be681a4d65ff