Redis 精選 30 道面試題

大家好,我是賀同學,分享好朋友 moon 老哥的 Redis 面試總結。

redis 作爲我們最常用的內存數據庫,很多地方你都能夠發現它的身影,比如說登錄信息的存儲,分佈式鎖的使用,其經常被我們當做緩存去使用。

可是,用了這麼久的 reids,你懂它嗎?

1. 什麼是 redis?它能做什麼?

redis: redis 即 Remote Dictionary Server,用中文翻譯過來可以理解爲遠程數據服務或遠程字典服務。其是使用 C 語言的編寫的 key-value 存儲系統

應用場景: 緩存,數據庫,消息隊列,分佈式鎖,點贊列表,排行榜等等

2.redis 有哪八種數據類型?有哪些應用場景?

redis 總共有八種數據結構,五種基本數據類型和三種特殊數據類型

五種基本數據類型:

3.redis 爲什麼這麼快?

官方數據 redis 可以做到每秒近 10w 的併發,這麼快的原因主要總結爲以下幾點:

4. 聽說 redis 6.0 之後又使用了多線程,不會有線程安全的問題嗎?

不會

其實 redis 還是使用單線程模型來處理客戶端的請求,只是使用多線程來處理數據的讀寫和協議解析,執行命令還是使用單線程,所以是不會有線程安全的問題。

之所以加入了多線程因爲 redis 的性能瓶頸在於網絡 IO 而非 CPU,使用多線程能提升 IO 讀寫的效率,從而整體提高 redis 的性能。

5.redis 的持久化機制有哪些?優缺點說說

redis 有兩種持久化的方式,AOF 和 RDB.

AOF:

AOF 的優缺點


RDB:

RDB 的優缺點

6. Redis 的過期鍵的刪除策略有哪些?

過期策略通常有以下三種:

7. Redis 的內存滿了怎麼辦?

實際上 Redis 定義了「8 種內存淘汰策略」用來處理 redis 內存滿的情況:

8.Redis 的熱 key 問題怎麼解決?

熱 key  就是說,在某一時刻,有非常多的請求訪問某個 key,流量過大,導致該 redi 服務器宕機

解決方案:

9. 緩存擊穿、緩存穿透、緩存雪崩是什麼?怎麼解決呢?

緩存穿透:

解決方案:

緩存擊穿:

解決方案:

緩存雪崩:

解決方案:

10.Redis 有哪些部署方式?

11. 哨兵有哪些作用?

12. 哨兵選舉過程是怎麼樣的?

選出領頭哨兵後,就開始了故障修復,會從選出一個從數據庫作爲新的 master

13.cluster 集羣模式是怎麼存放數據的?

一個 cluster 集羣中總共有 16384 個節點,集羣會將這 16384 個節點平均分配給每個節點,當然,我這裏的節點指的是每個主節點,就如同下圖:

14.cluster 的故障恢復是怎麼做的?

判斷故障的邏輯其實與哨兵模式有點類似,在集羣中,每個節點都會定期的向其他節點發送 ping 命令,通過有沒有收到回覆來判斷其他節點是否已經下線。

如果長時間沒有回覆,那麼發起 ping 命令的節點就會認爲目標節點疑似下線,也可以和哨兵一樣稱作主觀下線,當然也需要集羣中一定數量的節點都認爲該節點下線纔可以,我們來說說具體過程:

15. 主從同步原理是怎樣的?

因爲不會阻塞,所以,這部分初始化完成後,當主數據庫執行了改變數據的命令後,會異步的給 slave,這也就是我們說的複製同步階段,這個階段會貫穿在整個中從同步的過程中,直到主從同步結束後,複製同步纔會終止。

16. 無硬盤複製是什麼?

我們剛剛說了主從之間是通過 RDB 快照來交互的,雖然看來邏輯很簡單,但是還是會存在一些問題,但是會存在着一些問題。

爲了解決這種問題,redis 在後續的更新中也加入了無硬盤複製功能,也就是說直接通過網絡發送給 slave,避免了和硬盤交互,但是也是有 io 消耗

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/OATg5_H-E3_BN7qcxjVrdg