java面試寶典 redis篇 高可用和持久化

高可用

哨兵模式

image.png

基于主從模式(一主多從),主服務(wù)器提供寫(xiě)服務(wù),從服務(wù)器同步主服務(wù)器,從服務(wù)器可提供讀服務(wù),哨兵(可多個(gè)節(jié)點(diǎn)實(shí)現(xiàn)高可用)監(jiān)控所有服務(wù),實(shí)現(xiàn)故障時(shí)自動(dòng)主從切換

缺點(diǎn): 只提供高可用并沒(méi)有提高redis的讀寫(xiě)能力,存在主從切換時(shí)瞬斷問(wèn)題

高可用集群模式

redis單機(jī)支持10萬(wàn)并發(fā), Redis集群水平擴(kuò)展能突破這個(gè)并發(fā)數(shù)

image.png

各個(gè)集群模式數(shù)據(jù)獨(dú)立, Jedis(Redis官方推薦的Java連接開(kāi)發(fā)工具)通過(guò)算法計(jì)算緩存key落在哪個(gè)集群,再由這個(gè)集群提供服務(wù),算法參考 java面試寶典 redis篇 一致性hash算法, 假如集群主服務(wù)器掛了,對(duì)應(yīng)的服務(wù)唯一碼也會(huì)在列表中去掉,請(qǐng)求也就不會(huì)往故障集群發(fā)送,這就解決了主從切換瞬斷的問(wèn)題

持久化

RDB

RDB持久化是指在指定的時(shí)間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫(xiě)入磁盤(pán)

三種觸發(fā)模式

  1. save觸發(fā)方式
    該命令會(huì)阻塞當(dāng)前Redis服務(wù)器,執(zhí)行save命令期間,Redis不能處理其他命令,直到持久化過(guò)程完成為止, 這種方式顯然不可取。
  2. bgsave觸發(fā)方式
    執(zhí)行該save命令時(shí),Redis會(huì)在后臺(tái)異步進(jìn)行快照操作, 默認(rèn)采用這種方式
  3. 自動(dòng)觸發(fā)
    自動(dòng)觸發(fā)是由我們的配置文件來(lái)完成的。在redis.conf配置文件中,我們可以去設(shè)置

優(yōu)點(diǎn):

(1)RDB快照是一次全量備份,存儲(chǔ)的是內(nèi)存數(shù)據(jù)的二進(jìn)制序列化形式,存儲(chǔ)上非常緊湊,非常適合用于進(jìn)行備份和災(zāi)難恢復(fù)。
(2)RDB 在恢復(fù)大數(shù)據(jù)集時(shí)的速度比 AOF 的恢復(fù)速度要快。

缺點(diǎn):

備份是用子線程備份, 父進(jìn)程修改內(nèi)存子進(jìn)程不會(huì)反應(yīng)出來(lái),所以在快照持久化期間修改的數(shù)據(jù)不會(huì)被保存,可能丟失數(shù)據(jù)。

AOF

redis會(huì)將每一個(gè)收到的寫(xiě)命令都通過(guò)write函數(shù)追加到文件中。通俗的理解就是日志記錄。

由于持久化文件會(huì)變的越來(lái)越大, redis會(huì)會(huì)fork出一條新進(jìn)程來(lái)將文件重寫(xiě), 重寫(xiě)aof文件的操作,并沒(méi)有讀取舊的aof文件,而是將整個(gè)內(nèi)存中的數(shù)據(jù)庫(kù)內(nèi)容用命令的方式重寫(xiě)了一個(gè)新的aof文件,這點(diǎn)和快照有點(diǎn)類(lèi)似。

二種觸發(fā)模式

  1. 同步觸發(fā),數(shù)據(jù)可靠,但是會(huì)有延遲
  2. 異步觸發(fā),沒(méi)有延遲,可能有數(shù)據(jù)丟失

優(yōu)點(diǎn):

AOF日志文件的命令通過(guò)非常可讀的方式進(jìn)行記錄,這個(gè)特性非常適合做災(zāi)難性的誤刪除的緊急恢復(fù)。比如某人不小心用flushall命令清空了所有數(shù)據(jù),只要這個(gè)時(shí)候后臺(tái)rewrite還沒(méi)有發(fā)生,那么就可以立即拷貝AOF文件,將最后一條flushall命令給刪了,然后再將該AOF文件放回去,就可以通過(guò)恢復(fù)機(jī)制,自動(dòng)恢復(fù)所有數(shù)據(jù)

缺點(diǎn):

(1)對(duì)于同一份數(shù)據(jù)來(lái)說(shuō),AOF日志文件通常比RDB數(shù)據(jù)快照文件更大

(2)以前AOF發(fā)生過(guò)bug,就是通過(guò)AOF記錄的日志,進(jìn)行數(shù)據(jù)恢復(fù)的時(shí)候,沒(méi)有恢復(fù)一模一樣的數(shù)據(jù)出來(lái)。

更多demo請(qǐng)關(guān)注

springboot demo實(shí)戰(zhàn)項(xiàng)目
java 腦洞
java 面試寶典
開(kāi)源工具

公眾號(hào)

五分鐘了解前沿技術(shù),大數(shù)據(jù),微服務(wù),區(qū)域鏈,提供java前沿技術(shù)干貨,獨(dú)立游戲制作技術(shù)分享

五分鐘技術(shù)

如果這篇文章對(duì)你有幫助請(qǐng)給個(gè)star


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容