<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Redis 面試 8 連問,你能頂住幾道?

          共 2362字,需瀏覽 5分鐘

           ·

          2020-10-01 05:03

          Java技術(shù)棧

          www.javastack.cn

          關(guān)注閱讀更多優(yōu)質(zhì)文章



          1、如何保證Redis高可用和高并發(fā)?

          Redis主從架構(gòu),一主多從,可以滿足高可用和高并發(fā)。出現(xiàn)實例宕機自動進行主備切換,配置讀寫分離緩解Master讀寫壓力。

          2、Redis高可用方案具體怎么實施?

          使用官方推薦的哨兵(sentinel)機制就能實現(xiàn),當(dāng)主節(jié)點出現(xiàn)故障時,由Sentinel自動完成故障發(fā)現(xiàn)和轉(zhuǎn)移,并通知應(yīng)用方,實現(xiàn)高可用性。

          它有四個主要功能:

          • 集群監(jiān)控,負責(zé)監(jiān)控redis master和slave進程是否正常工作。

          • 消息通知,如果某個redis實例有故障,那么哨兵負責(zé)發(fā)送消息作為報警通知給管理員。

          • 故障轉(zhuǎn)移,如果master node掛掉了,會自動轉(zhuǎn)移到slave node上。

          • 配置中心,如果故障轉(zhuǎn)移發(fā)生了,通知client客戶端新的master地址。

          3、你能說說Redis哨兵機制的原理嗎?

          通過sentinel模式啟動Redis后,自動監(jiān)控master/slave的運行狀態(tài),基本原理是:心跳機制+投票裁決。

          每個sentinel會向其它sentinal、master、slave定時發(fā)送消息,以確認對方是否活著,如果發(fā)現(xiàn)對方在指定時間內(nèi)未回應(yīng),則暫時認為對方宕機。

          若哨兵群中的多數(shù)sentinel都報告某一master沒響應(yīng),系統(tǒng)才認為該master真正宕機,通過Raft投票算法,從剩下的slave節(jié)點中,選一臺提升為master,然后自動修改相關(guān)配置。

          4、部署Redis哨兵要注意哪些問題?

          哨兵至少需要3個實例,來保證自己的健壯性。哨兵的詳細教程及與Spring Boot如何集成請關(guān)注公眾號Java技術(shù)棧進行閱讀。

          5、Redis主從架構(gòu)數(shù)據(jù)會丟失嗎,為什么?

          有兩種數(shù)據(jù)丟失的情況:

          1)異步復(fù)制導(dǎo)致的數(shù)據(jù)丟失:因為master -> slave的復(fù)制是異步的,所以可能有部分?jǐn)?shù)據(jù)還沒復(fù)制到slave,master就宕機了,此時這些部分?jǐn)?shù)據(jù)就丟失了。

          2)腦裂導(dǎo)致的數(shù)據(jù)丟失:某個master所在機器突然脫離了正常的網(wǎng)絡(luò),跟其他slave機器不能連接,但是實際上master還運行著,此時哨兵可能就會認為master宕機了,然后開啟選舉,將其他slave切換成了master。這個時候,集群里就會有兩個master,也就是所謂的腦裂。此時雖然某個slave被切換成了master,但是可能client還沒來得及切換到新的master,還繼續(xù)寫向舊master的數(shù)據(jù)可能也丟失了。因此舊master再次恢復(fù)的時候,會被作為一個slave掛到新的master上去,自己的數(shù)據(jù)會清空,重新從新的master復(fù)制數(shù)據(jù)。

          6、Redis主從復(fù)制的工作原理?

          1)一個Slave實例,無論是第一次連接還是重連到Master,它都會發(fā)出一個SYNC命令;

          2)當(dāng)Master收到SYNC命令之后,會做兩件事:(a) Master執(zhí)行BGSAVE,即在后臺保存數(shù)據(jù)到磁盤(rdb快照文件);(b) Master同時將新收到的寫入和修改數(shù)據(jù)集的命令存入緩沖區(qū)(非查詢類);

          3)當(dāng)Master在后臺把數(shù)據(jù)保存到快照文件完成之后,Master會把這個快照文件傳送給Slave,而Slave則把內(nèi)存清空后,加載該文件到內(nèi)存中;

          4)而Master也會把此前收集到緩沖區(qū)中的命令,通過Reids命令協(xié)議形式轉(zhuǎn)發(fā)給Slave,Slave執(zhí)行這些命令,實現(xiàn)和Master的同步;

          5)Master/Slave此后會不斷通過異步方式進行命令的同步,達到最終數(shù)據(jù)的同步一致;

          7、由于主從延遲導(dǎo)致讀取到過期數(shù)據(jù)怎么處理?

          1)通過scan命令掃庫:當(dāng)Redis中的key被scan的時候,相當(dāng)于訪問了該key,同樣也會做過期檢測,充分發(fā)揮Redis惰性刪除的策略。這個方法能大大降低了臟數(shù)據(jù)讀取的概率,但缺點也比較明顯,會造成一定的數(shù)據(jù)庫壓力,否則影響線上業(yè)務(wù)的效率。

          2)Redis加入了一個新特性來解決主從不一致導(dǎo)致讀取到過期數(shù)據(jù)問題,增加了key是否過期以及對主從庫的判斷,如果key已過期,當(dāng)前訪問的master則返回null;當(dāng)前訪問的是從庫,且執(zhí)行的是只讀命令也返回null。

          8、Redis Key的過期策略有哪些?

          1)惰性刪除:當(dāng)讀/寫一個已經(jīng)過期的key時,會觸發(fā)惰性刪除策略,直接刪除掉這個過期key,很明顯,這是被動的。

          2)定期刪除:由于惰性刪除策略無法保證冷數(shù)據(jù)被及時刪掉,所以 Redis 會定期主動淘汰一批已過期的key。

          3)主動刪除:當(dāng)前已用內(nèi)存超過maxMemory限定時,觸發(fā)主動清理策略。主動設(shè)置的前提是設(shè)置了maxMemory的值。

          作者:編碼磚家
          出處:https://www.cnblogs.com/xiaoyangjia/

          參考文章:

          https://www.jianshu.com/p/d8ed8de5b1fa
          https://my.oschina.net/u/3023401/blog/2208181
          https://www.cnblogs.com/leeSmall/p/8398401.html
          https://blog.csdn.net/ssllkkyyaa/article/details/84107474
          https://www.cnblogs.com/itdragon/p/7932178.html

          關(guān)注公眾號Java技術(shù)棧,回復(fù):面試,獲取更多面試題。





          關(guān)注Java技術(shù)棧看更多干貨



          戳原文,獲取精選面試題!
          瀏覽 52
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产成人无码A片免费男男 | 亚洲va中文字幕 亚洲成人性爱网站 | 黄色小视频在线观看 | 午夜精品成人无码 | 国产精品日韩欧美一级极品欧美日韩一级精品 |