12-碼農(nóng)求職小助手Redis高頻面試題_第1頁(yè)
12-碼農(nóng)求職小助手Redis高頻面試題_第2頁(yè)
12-碼農(nóng)求職小助手Redis高頻面試題_第3頁(yè)
12-碼農(nóng)求職小助手Redis高頻面試題_第4頁(yè)
12-碼農(nóng)求職小助手Redis高頻面試題_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

筆記本:18-Redis 創(chuàng)建時(shí)間:2019/9/7 21:57更新時(shí)間:2019/9/7 21:57 作者:pc941206 碼農(nóng)求職小助手:Redis高頻面試題 更多資料請(qǐng)關(guān)注微信公眾號(hào):碼農(nóng)求職小助手 1、redis 是什么?都有哪些使用場(chǎng)景? 2、redis 有哪些功能? 3、redis 和 memecache 有什么區(qū)別? 4、redis 為什么是單線程的? redis 支持的數(shù)據(jù)類型有哪些? 什么是緩存雪崩?該如何解決? 什么是緩存雪崩? 如何解決緩存雪崩? 5、什么是緩存穿透?怎么解決? 什么是緩存穿透? 緩存穿透的解決方案? 緩存與數(shù)據(jù)庫(kù)雙寫(xiě)一致問(wèn)題 對(duì)于讀操作 什么是緩存與數(shù)據(jù)庫(kù)雙寫(xiě)一致問(wèn)題? 怎么保證緩存和數(shù)據(jù)庫(kù)數(shù)據(jù)的一致性? 8、redis 持久化有幾種方式? 9、redis 怎么實(shí)現(xiàn)分布式鎖? 10、redis 分布式鎖有什么缺陷? 11、redis 如何做內(nèi)存優(yōu)化? 12、redis 淘汰策略有哪些? 13、redis 常見(jiàn)的性能問(wèn)題有哪些?該如何解決? 1、redis 是什么?都有哪些使用場(chǎng)景? redis 是一個(gè)開(kāi)源的使用 ANSI C 語(yǔ)言編寫(xiě)、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志 型、Key-Value數(shù)據(jù)庫(kù),并提供多種語(yǔ)言的 API。 redis 使用場(chǎng)景: 1、數(shù)據(jù)高并發(fā)的讀寫(xiě); 2、海量數(shù)據(jù)的讀寫(xiě); 3、對(duì)擴(kuò)展性要求高的數(shù)據(jù)。 2、redis 有哪些功能? 1、數(shù)據(jù)緩存功能; 2、分布式鎖的功能; 3、支持?jǐn)?shù)據(jù)持久化; 4、支持事務(wù); 5、支持消息隊(duì)列。 3、redis 和 memecache 有什么區(qū)別? 1、memcached 所有的值均是簡(jiǎn)單的字符串,redis 作為其替代者,支持更為豐富的數(shù)據(jù) 類型; 2、redis 的速度比 memcached 快很多; 3、redis 可以持久化其數(shù)據(jù)。 4、redis 為什么是單線程的? 因?yàn)?cpu 不是 redis 的瓶頸,redis 的瓶頸最有可能是機(jī)器內(nèi)存或者網(wǎng)絡(luò)帶寬。既然 單線程容易實(shí)現(xiàn),而且 cpu 又不會(huì)成為瓶頸,那就順理成章地采用單線程的方案了。 關(guān)于 redis 的性能,官方網(wǎng)站也有,普通筆記本輕松處理每秒幾十萬(wàn)的請(qǐng)求。而且單 線程并不代表就慢, nginx 和 nodejs 也都是高性能單線程的代表。 redis 支持的數(shù)據(jù)類型有哪些? string、list、hash、set、zset。 什么是緩存雪崩?該如何解決? 緩存都掛掉了,所有的請(qǐng)求都走數(shù)據(jù)庫(kù)了。 我們都知道 Redis 不可能把所有的數(shù)據(jù)都緩存起來(lái)(內(nèi)存昂貴且有限),所以 Redis 需要對(duì)數(shù)據(jù)設(shè)置過(guò)期時(shí)間,并采用的是惰性刪除+定期刪除兩種策略對(duì)過(guò)期鍵刪除。 如果緩存數(shù)據(jù)設(shè)置的過(guò)期時(shí)間是相同的,并且 Redis 恰好將這部分?jǐn)?shù)據(jù)全部刪光了。 這就會(huì)導(dǎo)致在這段時(shí)間內(nèi),這些緩存同時(shí)失效,全部請(qǐng)求到數(shù)據(jù)庫(kù)中。這就是緩存雪崩: Redis 掛掉了,請(qǐng)求全部走數(shù)據(jù)庫(kù)。 緩存雪崩如果發(fā)生了,很可能就把我們的數(shù)據(jù)庫(kù)搞 垮,導(dǎo)致整個(gè)服務(wù)癱瘓。 1、在緩存的時(shí)候給過(guò)期時(shí)間加上一個(gè)隨機(jī)值,這樣就會(huì)大幅度的減少緩存在同一時(shí)間過(guò) 期。 2、對(duì)于“Redis 掛掉了,請(qǐng)求全部走數(shù)據(jù)庫(kù)”這種情況,我們可以有以下的思路: (1)事發(fā)前:實(shí)現(xiàn) Redis 的高可用(主從架構(gòu)+ Sentinel 或者 Redis Cluster),盡量避免 Redis 掛掉這種情況發(fā)生。 什么是緩存雪崩? 如何解決緩存雪崩? (2)事發(fā)中:萬(wàn)一 Redis 真的掛了,我們可以設(shè)置本地緩存(ehcache)+限流(hystrix), 盡量避免我們的數(shù)據(jù)庫(kù)被干掉(起碼能保證我們的服務(wù)還是能正常工作的); (3)事發(fā)后:redis 持久化,重啟后自動(dòng)從磁盤(pán)上加載數(shù)據(jù),快速恢復(fù)緩存數(shù)據(jù)。 5、什么是緩存穿透?怎么解決? 緩存穿透:指查詢一個(gè)一定不存在的數(shù)據(jù),由于緩存是不命中時(shí)需要從數(shù)據(jù)庫(kù)查詢,查不 到數(shù)據(jù)則不寫(xiě)入緩存,這將導(dǎo)致這個(gè)不存在的數(shù)據(jù)每次請(qǐng)求都要到數(shù)據(jù)庫(kù)去查詢,造成緩 存穿透。 1、由于請(qǐng)求的參數(shù)是不合法的(每次都請(qǐng)求不存在的參數(shù)),于是我們可以使用布隆過(guò)濾 器(BloomFilter) 或者壓縮 filter 提前攔截,不合法就不讓這個(gè)請(qǐng)求到數(shù)據(jù)庫(kù)層; 什么是緩存穿透? 緩存穿透的解決方案? 2、最簡(jiǎn)單粗暴的方法如果一個(gè)查詢返回的數(shù)據(jù)為空(不管是數(shù)據(jù)不存在,還是系統(tǒng)故 障),我們就把這個(gè)空結(jié)果進(jìn)行緩存,但它的過(guò)期時(shí)間會(huì)很短,最長(zhǎng)不超過(guò)五分鐘。 緩存與數(shù)據(jù)庫(kù)雙寫(xiě)一致問(wèn)題 流程是這樣的如果我們的數(shù)據(jù)在緩存里邊有,那么就直接取緩存的。如果緩存里沒(méi)有 我們想要的數(shù)據(jù),我們會(huì)先去查詢數(shù)據(jù)庫(kù),然后將數(shù)據(jù)庫(kù)查出來(lái)的數(shù)據(jù)寫(xiě)到緩存中。最后 將數(shù)據(jù)返回給請(qǐng)求。 如果僅僅查詢的話,緩存的數(shù)據(jù)和數(shù)據(jù)庫(kù)的數(shù)據(jù)是沒(méi)問(wèn)題的。但是,當(dāng)我們要更新時(shí) 候呢?各種情況很可能就造成數(shù)據(jù)庫(kù)和緩存的數(shù)據(jù)不一致了。這里不一致指的是:數(shù)據(jù)庫(kù) 的數(shù)據(jù)跟緩存的數(shù)據(jù)不一致。 怎么保證緩存和數(shù)據(jù)庫(kù)數(shù)據(jù)的一致性? 1、從理論上說(shuō),只要我們?cè)O(shè)置了合理的鍵的過(guò)期時(shí)間,我們就能保證緩存和數(shù)據(jù)庫(kù)的數(shù)據(jù) 最終是一致的。因?yàn)橹灰彺鏀?shù)據(jù)過(guò)期了,就會(huì)被刪除。隨后讀的時(shí)候,因?yàn)榫彺胬餂](méi) 有,就可以查數(shù)據(jù)庫(kù)的數(shù)據(jù),然后將數(shù)據(jù)庫(kù)查出來(lái)的數(shù)據(jù)寫(xiě)入到緩存中。除了設(shè)置過(guò)期時(shí) 間,我們還需要做更多的措施來(lái)盡量避免數(shù)據(jù)庫(kù)與緩存處于不一致的情況發(fā)生。 2、新增、更改、刪除數(shù)據(jù)庫(kù)操作時(shí)同步更新 redis,可以使用事物機(jī)制來(lái)保證數(shù)據(jù)的一致 性。 對(duì)于讀操作 什么是緩存與數(shù)據(jù)庫(kù)雙寫(xiě)一致問(wèn)題? 8、redis 持久化有幾種方式? redis 的持久化有兩種方式,或者說(shuō)有兩種策略: 1、RDB(Redis Database):指定的時(shí)間間隔能對(duì)你的數(shù)據(jù)進(jìn)行快照存儲(chǔ); 2、AOF(Append Only File):每一個(gè)收到的寫(xiě)命令都通過(guò) write 函數(shù)追加到文件中。 9、redis 怎么實(shí)現(xiàn)分布式鎖? redis 分布式鎖其實(shí)就是在系統(tǒng)里面占一個(gè)“坑”,其他程序也要占“坑”的時(shí)候,占 用成功了就可以繼續(xù)執(zhí)行,失敗了就只能放棄或稍后重試。 占坑一般使用 setnx(set if not exists)指令,只允許被一個(gè)程序占有,使用完調(diào) 用 del 釋放鎖。 10、redis 分布式鎖有什么缺陷? redis 分布式鎖不能解決超時(shí)的問(wèn)題,分布式鎖有一個(gè)超時(shí)時(shí)間,程序的執(zhí)行如果超出 了鎖的超時(shí)時(shí)間就會(huì)出現(xiàn)問(wèn)題。 11、redis 如何做內(nèi)存優(yōu)化? 盡可能使用散列表(hash),散列表(是說(shuō)散列表里面存儲(chǔ)的數(shù)少)使用的內(nèi)存非常 小,所以你應(yīng)該盡可能的將你的數(shù)據(jù)模型抽象到一個(gè)散列表里面。 比如你的 web 系統(tǒng)中有一個(gè)用戶對(duì)象,不要為這個(gè)用戶的名稱,姓氏,郵箱,密碼設(shè) 置單獨(dú)的 key,而是應(yīng)該把這個(gè)用戶的所有信息存儲(chǔ)到一張散列表里面。 12、redis 淘汰策略有哪些? 1、volatile-lru:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集(server. dbi. expires)中挑選最近最少使 用的數(shù)據(jù)淘汰。 2、volatile-ttl:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集(server. dbi. expires)中挑選將要過(guò)期的 數(shù)據(jù)淘汰。 3、volatile-random:從已設(shè)置過(guò)期時(shí)間的數(shù)據(jù)集(server. dbi. expires)中任意選擇 數(shù)據(jù)淘汰。 4、allkeys-lru:從數(shù)據(jù)集(server. dbi. dict)中挑選最近最少使用的數(shù)據(jù)淘汰。 5、allkeys-random:從數(shù)據(jù)集(server. dbi. dict)中任意選擇數(shù)據(jù)淘汰。 6、no-

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論