19年12月份面試集合【redis】

瞭解緩存穿透、緩存雪崩、緩存擊穿以及解決方案
分佈式鎖一般有三種實現方式:1. 數據庫樂觀鎖;2. 基於Redis的分佈式鎖;3. 基於ZooKeeper的分佈式鎖

1、如何保證Redis高可用和高併發?
Redis主從架構,一主多從,可以滿足高可用和高併發。出現實例宕機自動進行主備切換,配置讀寫分離緩解Master讀寫壓力。
2、Redis高可用方案具體怎麼實施?
使用官方推薦的哨兵(sentinel)機制就能實現,當主節點出現故障時,由Sentinel自動完成故障發現和轉移,並通知應用方,實現高可用性。它有四個主要功能:
集羣監控,負責監控redis master和slave進程是否正常工作。
消息通知,如果某個redis實例有故障,那麼哨兵負責發送消息作爲報警通知給管理員。
故障轉移,如果master node掛掉了,會自動轉移到slave node上。
配置中心,如果故障轉移發生了,通知client客戶端新的master地址。
3、你能說說Redis哨兵機制的原理嗎?
通過sentinel模式啓動redis後,自動監控master/slave的運行狀態,基本原理是:心跳機制+投票裁決。每個sentinel會向其它sentinal、master、slave定時發送消息,以確認對方是否活着,如果發現對方在指定時間內未迴應,則暫時認爲對方宕機。若哨兵羣中的多數sentinel都報告某一master沒響應,系統才認爲該master真正宕機,通過Raft投票算法,從剩下的slave節點中,選一臺提升爲master,然後自動修改相關配置。
4.Redis主從架構數據會丟失嗎,爲什麼?
有兩種數據丟失的情況:
1.異步複製導致的數據丟失:因爲master -> slave的複製是異步的,所以可能有部分數據還沒複製到slave,master就宕機了,此時這些部分數據就丟失了。
2.腦裂導致的數據丟失:某個master所在機器突然脫離了正常的網絡,跟其他slave機器不能連接,但是實際上master還運行着,此時哨兵可能就會認爲master宕機了,然後開啓選舉,將其他slave切換成了master。這個時候,集羣裏就會有兩個master,也就是所謂的腦裂。此時雖然某個slave被切換成了master,但是可能client還沒來得及切換到新的master,還繼續寫向舊master的數據可能也丟失了。因此舊master再次恢復的時候,會被作爲一個slave掛到新的master上去,自己的數據會清空,重新從新的master複製數據。
5、Redis主從複製的工作原理?
1.一個Slave實例,無論是第一次連接還是重連到Master,它都會發出一個SYNC命令;
2.當Master收到SYNC命令之後,會做兩件事:(a) Master執行BGSAVE,即在後臺保存數據到磁盤(rdb快照文件);(b) Master同時將新收到的寫入和修改數據集的命令存入緩衝區(非查詢類);
3.當Master在後臺把數據保存到快照文件完成之後,Master會把這個快照文件傳送給Slave,而Slave則把內存清空後,加載該文件到內存中;
4.而Master也會把此前收集到緩衝區中的命令,通過Reids命令協議形式轉發給Slave,Slave執行這些命令,實現和Master的同步;
5.Master/Slave此後會不斷通過異步方式進行命令的同步,達到最終數據的同步一致;
6、Redis Key的過期策略有哪些?
惰性刪除:當讀/寫一個已經過期的key時,會觸發惰性刪除策略,直接刪除掉這個過期key,很明顯,這是被動的。
定期刪除:由於惰性刪除策略無法保證冷數據被及時刪掉,所以 redis 會定期主動淘汰一批已過期的key。
主動刪除:當前已用內存超過maxMemory限定時,觸發主動清理策略。主動設置的前提是設置了maxMemory的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章