緩存的面試問題
緩存的面試問題有很多,我個人總結(jié)大概有下面幾點,你可以從這些方面作為面試參考。
1.為什么選用緩存?這個可以高性能高并發(fā)的方面回答面試官,由于緩存數(shù)據(jù)存儲在內(nèi)存中,其相對IO操作要快的多,而且內(nèi)存天然就支撐高并發(fā)。
2.使用緩存做了什么?這個根據(jù)自己的項目的業(yè)務(wù)場景去回答,比如應(yīng)對高并發(fā)訪問熱點數(shù)據(jù),減輕數(shù)據(jù)庫的壓力;比如充當分布式鎖,保證線程安全;比如充當消息隊列;比如充當計數(shù)器;比如解決分布式應(yīng)用中的共享Session問題。
3.緩存為什么快?可以從下面幾點去回答:首先其數(shù)據(jù)存儲在內(nèi)存中,其次采用單線程避免上下文切換,還有使用多路I/O復用模型,非阻塞IO,以及一些底層的模型設(shè)計。
4.緩存的數(shù)據(jù)備份問題?這里可以有以下的相關(guān)問題,比如備份方式:Redis默認采用Rdb方式備份,符合設(shè)定的條件時redis會將內(nèi)存中的所有數(shù)據(jù)自動生成一份副本保存到硬盤上,可以通過配置文件開啟AOF備份。比如兩種備份的區(qū)別:AOF持久化保存的數(shù)據(jù)更完整一些,但是同時會帶來性能上的損耗。
5.緩存穿透問題?訪問一個不存在的key,緩存不起作用,請求會落到數(shù)據(jù)庫上,如果請求量很大,數(shù)據(jù)庫有可能會掛掉。解決方案:緩存空值,布隆過濾器,互斥鎖排隊。
6.緩存雪崩問題?緩存在同一時間內(nèi)大量鍵過期(失效),接著來的一大波請求瞬間都落在了數(shù)據(jù)庫中導致連接異常。解決方案:互斥鎖排隊,分散失效時間。
7.緩存無底洞問題?集群節(jié)點加機器性能沒能提升,反而下降。解決方案:采用哈希一致性辦法,將特定數(shù)據(jù)存在指定的緩存
希望我的回答對你有所幫助