目錄
創(chuàng)新互聯(lián)公司-成都網(wǎng)站建設(shè)公司,專(zhuān)注成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站營(yíng)銷(xiāo)推廣,域名申請(qǐng),網(wǎng)頁(yè)空間,網(wǎng)站托管有關(guān)企業(yè)網(wǎng)站制作方案、改版、費(fèi)用等問(wèn)題,請(qǐng)聯(lián)系創(chuàng)新互聯(lián)公司。1、什么是緩存預(yù)熱?
2、什么是緩存熱備?
3、什么是緩存雪崩?
4、如何解決緩存雪崩?
5、什么是緩存穿透?
6、如何解決緩存穿透?
7、什么是緩存擊穿?
8、如何解決緩存擊穿?
9、什么是緩存抖動(dòng)?
10、如何解決緩存抖動(dòng)?
11、什么是緩存無(wú)底洞?
12、如何解決緩存無(wú)底洞?
13、如何解決Redis和數(shù)據(jù)庫(kù)雙寫(xiě)一致性問(wèn)題?
14、Redis有哪些危險(xiǎn)命令?如何防范?
緩存預(yù)熱就是新的緩存系統(tǒng)沒(méi)有任何緩存數(shù)據(jù)序在緩存重建數(shù)據(jù)的過(guò)程中,系統(tǒng)性能和數(shù)據(jù)庫(kù)負(fù)載都不太好,所以最好是在系統(tǒng)上線之前就把要緩存的熱點(diǎn)數(shù)據(jù)加載到緩存中,這種緩存預(yù)加載手段就是緩存預(yù)熱。
2、什么是緩存熱備?緩存熱備即當(dāng)一臺(tái)緩存服務(wù)器不可用時(shí)能實(shí)時(shí)切換到備用緩存服務(wù)器,不影響緩存使用。
集群模式下,每個(gè)主節(jié)點(diǎn)都會(huì)有一個(gè)或多個(gè)從節(jié)點(diǎn)來(lái)當(dāng)備用,一旦主節(jié)點(diǎn)掛了,從節(jié)點(diǎn)立即充當(dāng)主節(jié)點(diǎn)使用。
3、什么是緩存雪崩?緩存雪崩就是指由于緩存的原因,導(dǎo)致大量請(qǐng)求到達(dá)后端數(shù)據(jù)庫(kù),從而導(dǎo)致數(shù)據(jù)庫(kù)崩潰,整個(gè)系統(tǒng)崩潰,發(fā)生災(zāi)難。
4、如何解決緩存雪崩?緩存雪崩解決方案:
給緩存的失效時(shí)間,加上一個(gè)隨機(jī)值,避免集體失效。
1)雙緩存,我們有兩個(gè)緩存,緩存A和緩存B。
緩存A的失效時(shí)間為20分鐘,緩存B不設(shè)失效時(shí)間。自己做緩存預(yù)熱操作。然后細(xì)分以下幾個(gè)小點(diǎn):從緩存A讀數(shù)據(jù),有則直接返回;
A沒(méi)有數(shù)據(jù);a直接從B讀數(shù)據(jù),直接返回,并且異步啟動(dòng)一個(gè)更新線程,更新線程同時(shí)更新緩存A和緩存B。
2)LRU與LFU切換
3)超熱數(shù)據(jù)使用永久key
4)定期維護(hù)(自動(dòng)+人工)
對(duì)即將過(guò)期數(shù)據(jù)做訪問(wèn)量分析,確認(rèn)是否延時(shí),配合訪問(wèn)量統(tǒng)計(jì),做熱點(diǎn)數(shù)據(jù)的延時(shí)
5)加鎖(慎用)
5、什么是緩存穿透?緩存穿透指在高并發(fā)場(chǎng)景下,如果某個(gè)key被高并發(fā)訪問(wèn),沒(méi)有被命中,出于對(duì)容錯(cuò)性考慮,會(huì)嘗試去從后端數(shù)據(jù)庫(kù)中獲取,從而導(dǎo)致了大量請(qǐng)求達(dá)到數(shù)據(jù)庫(kù),而當(dāng)該key對(duì)應(yīng)的數(shù)據(jù)本身就是空的情況下,這就導(dǎo)致數(shù)據(jù)庫(kù)中并發(fā)的去執(zhí)行了很多不必要的查詢(xún)操作,從而導(dǎo)致巨大沖擊和壓力。
簡(jiǎn)單總結(jié):
緩存擊穿:熱點(diǎn)數(shù)據(jù),數(shù)據(jù)庫(kù)壓力大 ?
緩存穿透:本來(lái)就是空數(shù)據(jù),redis沒(méi)有該數(shù)據(jù),數(shù)據(jù)庫(kù)沒(méi)有該數(shù)據(jù)
6、如何解決緩存穿透?緩存穿透解決方案: .
1.緩存空對(duì)象
對(duì)查詢(xún)結(jié)果為空的對(duì)象也進(jìn)行緩存,如果是集合,可以緩存一個(gè)空的集合(非nul) ,如果是緩存單個(gè)對(duì)象,可以通過(guò)字段標(biāo)識(shí)來(lái)區(qū)分。這樣避免請(qǐng)求穿透到后端數(shù)據(jù)庫(kù)。
同時(shí),也需要保證緩存數(shù)據(jù)的時(shí)效性。這種方式實(shí)現(xiàn)起來(lái)成本較低,比較適合命中不高,但可能被頻繁更新的數(shù)據(jù)。
2.單獨(dú)過(guò)濾處理
對(duì)所有可能對(duì)應(yīng)數(shù)據(jù)為空的key進(jìn)行統(tǒng)一的存放,并在請(qǐng)求前做攔截這樣避免請(qǐng)求穿透到后端數(shù)據(jù)庫(kù)。這種方式實(shí)現(xiàn)起來(lái)相對(duì)復(fù)雜,比較適合命中不高,但是更新不頻繁的數(shù)據(jù)。
7、什么是緩存擊穿?緩存擊穿:實(shí)際上是緩存雪崩的一個(gè)特例,大家使用過(guò)微博的應(yīng)該都知道,微博有一個(gè)熱門(mén)話題的功能,用戶(hù)對(duì)于熱門(mén)話題的搜索量往往在一些時(shí)刻會(huì)大大的高于其他話題,這種我們稱(chēng)為系統(tǒng)的“熱點(diǎn)”。
由于系統(tǒng)中對(duì)這些熱點(diǎn)的數(shù)據(jù)緩存也存在失效時(shí)間,在熱點(diǎn)的緩存到達(dá)失效時(shí)間時(shí),此時(shí)可能依然會(huì)有大量的請(qǐng)求到達(dá)系統(tǒng),沒(méi)有了緩存層的保護(hù),這些請(qǐng)求同樣的會(huì)到達(dá)從而可能引起故障。
擊穿與雪崩的區(qū)別即在于擊穿是對(duì)于特定的熱點(diǎn)數(shù)據(jù)來(lái)說(shuō),而雪崩是全部數(shù)據(jù)。
8、如何解決緩存擊穿?解決方案:
1)對(duì)于熱點(diǎn)數(shù)據(jù)進(jìn)行二級(jí)緩存: ?
2)對(duì)于不同級(jí)別的緩存設(shè)定不同的失效時(shí)間
9、什么是緩存抖動(dòng)?緩存抖動(dòng)可以看做是一種比”緩存雪崩”更輕微的緩存故障,一般是由于緩存節(jié)點(diǎn)故障導(dǎo)致,但是也會(huì)在一段時(shí)間內(nèi)對(duì)系統(tǒng)造成沖擊和性能影響。
10、如何解決緩存抖動(dòng)?一般是由于緩存節(jié)點(diǎn)故障導(dǎo)致,業(yè)內(nèi)推薦的做法是通過(guò)一致性Hash算法來(lái)解決。
11、什么是緩存無(wú)底洞?該問(wèn)題由facebook的工作人員提出的facebook在2010 年左右,memcached 節(jié)點(diǎn)就已經(jīng)達(dá)3000個(gè)示緩存數(shù)千G內(nèi)容。
他們發(fā)現(xiàn)了一個(gè)問(wèn)題: memcached連接頻率,導(dǎo)致效率下降了,于是加memcached節(jié)點(diǎn),添加了后,發(fā)現(xiàn)因?yàn)檫B接頻率導(dǎo)致的問(wèn)題,仍然存在,并沒(méi)有好轉(zhuǎn),稱(chēng)之為”無(wú)底洞現(xiàn)象”。
目前主流的數(shù)據(jù)庫(kù)、緩存、NoSQL、 搜索中間件等都支持分片技術(shù),來(lái)滿足高性能、高并發(fā)、高可用、可擴(kuò)展等要求,每一次操作都可能需要和不同節(jié)點(diǎn)進(jìn)行網(wǎng)絡(luò)通信來(lái)完成,實(shí)例節(jié)點(diǎn)越多,則開(kāi)銷(xiāo)會(huì)越大,對(duì)性能影響就越大。
緩存無(wú)底洞現(xiàn)象并不常見(jiàn),在絕大多數(shù)的公司里可能根本不會(huì)遇到。
12、如何解決緩存無(wú)底洞?可以從如下幾個(gè)方面避免和優(yōu)化:
1.不同的數(shù)據(jù)分布方式
有些業(yè)務(wù)數(shù)據(jù)可能適合Hash分布,而有些業(yè)務(wù)適合采用范圍分布,這樣能夠從一定程度避免網(wǎng)絡(luò)IO的開(kāi)銷(xiāo)。
2. I0優(yōu)化
可以充分利用連接池,NIO等技術(shù)來(lái)盡可能降低連接開(kāi)銷(xiāo),增強(qiáng)并發(fā)連接能力。
3.一次性獲取大的數(shù)據(jù)集
一次性獲取大的數(shù)據(jù)集,會(huì)比分多次去獲取小數(shù)據(jù)集的網(wǎng)絡(luò)IO開(kāi)銷(xiāo)更小。
13、如何解決Redis和數(shù)據(jù)庫(kù)雙寫(xiě)一致性問(wèn)題?當(dāng)數(shù)據(jù)時(shí)效性要求很高時(shí),需要保證緩存中的數(shù)據(jù)與數(shù)據(jù)庫(kù)中的保持一致,而且需要保證緩存節(jié)點(diǎn)和副本中的數(shù)據(jù)也保持一致, 不能出現(xiàn)差異現(xiàn)象,這就比較依賴(lài)緩存的過(guò)期和更新策略。
一般會(huì)在數(shù)據(jù)發(fā)生更改的時(shí),主動(dòng)更新緩存中的數(shù)據(jù)或者移除對(duì)應(yīng)的緩存。
1)采取正確更新策略,先更新數(shù)據(jù)庫(kù),再刪緩存。
2)可能存在刪除緩存失敗的問(wèn)題,提供一個(gè)消息隊(duì)列作補(bǔ)償措施。
14、Redis有哪些危險(xiǎn)命令?如何防范?Redis有哪些危險(xiǎn)命令?
Redis的危險(xiǎn)命令主要有以下幾個(gè):
●keys
客戶(hù)端可查詢(xún)出所有存在的鍵。.
●flushdb
刪除Redis中當(dāng)前所在數(shù)據(jù)庫(kù)中的所有記錄,并且此命令從不會(huì)執(zhí)行失敗。
●flushall
刪除Redis中所有數(shù)據(jù)庫(kù)中的所有記錄,不只是當(dāng)前所在數(shù)據(jù)庫(kù),并且此命令從不會(huì)執(zhí)行失敗。
●config
客戶(hù)端可修改Redis配置。
怎么禁用或重命名危險(xiǎn)命令?
看下redis.conf
默認(rèn)配置文件,找到SECURITY區(qū)域,如以下所示。
看說(shuō)明,添加rename- command配置即可達(dá)到安全目的。
1)禁用命令
2)重命名命令
上面的x可以定義新命令名稱(chēng)或者用隨機(jī)字符代替。
經(jīng)過(guò)以上的設(shè)置之后,危險(xiǎn)命令就不會(huì)被客戶(hù)端執(zhí)行了。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站名稱(chēng):Redis常見(jiàn)面試題(七)-創(chuàng)新互聯(lián)
文章出自:http://chinadenli.net/article18/ehegp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、域名注冊(cè)、全網(wǎng)營(yíng)銷(xiāo)推廣、響應(yīng)式網(wǎng)站、網(wǎng)站維護(hù)、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容