HOME 首頁(yè)
SERVICE 服務(wù)產(chǎn)品
XINMEITI 新媒體代運(yùn)營(yíng)
CASE 服務(wù)案例
NEWS 熱點(diǎn)資訊
ABOUT 關(guān)于我們
CONTACT 聯(lián)系我們
創(chuàng)意嶺
讓品牌有溫度、有情感
專注品牌策劃15年

    redis快照(redis快照持久化)

    發(fā)布時(shí)間:2023-04-14 06:40:55     稿源: 創(chuàng)意嶺    閱讀: 56        

    大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于redis快照的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。

    開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等

    只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫(xiě)出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端

    官網(wǎng):https://ai.de1919.com。

    創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話175-8598-2043,或添加微信:1454722008

    本文目錄:

    redis快照(redis快照持久化)

    一、redis 使用rdb快照速度怎么樣

    redis 的持久化: 快照(snapshot):特定時(shí)間、特定命令、特定條件來(lái)觸發(fā),把某一時(shí)刻在內(nèi)存中的數(shù)據(jù)全部寫(xiě)出到硬盤(pán)當(dāng)中去。 快照的時(shí)間不是實(shí)時(shí)的,可能會(huì)有數(shù)據(jù)的丟失。 在宕機(jī)之后,會(huì)把全部dump文件中的數(shù)據(jù)讀入到內(nèi)存中

    二、redis可以持久化嗎

    redis 數(shù)據(jù)持久化

     

    1、快照(snapshots)

    缺省情況情況下,Redis把數(shù)據(jù)快照存放在磁盤(pán)上的二進(jìn)制文件中,文件名為dump.rdb。你可以配置Redis的持久化策略,例如數(shù)據(jù)集中每N秒鐘有超過(guò)M次更新,就將數(shù)據(jù)寫(xiě)入磁盤(pán);或者你可以手工調(diào)用命令SAVE或BGSAVE。

    數(shù)據(jù)保存的目錄:

     

    工作原理

    Redis forks.

    子進(jìn)程開(kāi)始將數(shù)據(jù)寫(xiě)到臨時(shí)RDB文件中。

    當(dāng)子進(jìn)程完成寫(xiě)RDB文件,用新文件替換老文件。

    這種方式可以使Redis使用copy-on-write技術(shù)。

     

    2、APPEND ONLY MODE(AOF)

    快照模式并不十分健壯,當(dāng)系統(tǒng)停止,或者無(wú)意中Redis被kill掉,最后寫(xiě)入Redis的數(shù)據(jù)就會(huì)丟失。這對(duì)某些應(yīng)用也許不是大問(wèn)題,但對(duì)于要求高可靠性的應(yīng)用來(lái)說(shuō),Redis就不是一個(gè)合適的選擇。

    Append-only文件模式是另一種選擇。

    你可以在配置文件中打開(kāi)AOF模式:

     

    選項(xiàng):

    1、appendfsync no

    當(dāng)設(shè)置appendfsync為no的時(shí)候,Redis不會(huì)主動(dòng)調(diào)用fsync去將AOF日志內(nèi)容同步到磁盤(pán),所以這一切就完全依賴于操作系統(tǒng)的調(diào)試了。對(duì)大多數(shù)Linux操作系統(tǒng),是每30秒進(jìn)行一次fsync,將緩沖區(qū)中的數(shù)據(jù)寫(xiě)到磁盤(pán)上。

    2、appendfsync everysec

    當(dāng)設(shè)置appendfsync為everysec的時(shí)候,Redis會(huì)默認(rèn)每隔一秒進(jìn)行一次fsync調(diào)用,將緩沖區(qū)中的數(shù)據(jù)寫(xiě)到磁盤(pán)。但是當(dāng)這一 次的fsync調(diào)用時(shí)長(zhǎng)超過(guò)1秒時(shí)。Redis會(huì)采取延遲fsync的策略,再等一秒鐘。也就是在兩秒后再進(jìn)行fsync,這一次的fsync就不管會(huì)執(zhí)行多長(zhǎng)時(shí)間都會(huì)進(jìn)行。這時(shí)候由于在fsync時(shí)文件描述符會(huì)被阻塞,所以當(dāng)前的寫(xiě)操作就會(huì)阻塞。

    所以,結(jié)論就是:在絕大多數(shù)情況下,Redis會(huì)每隔一秒進(jìn)行一次fsync。在最壞的情況下,兩秒鐘

    三、緩存-redis 三種模式搭建和運(yùn)行原理

    標(biāo)簽: redis 緩存 主從 哨兵 集群

    本文簡(jiǎn)單的介紹redis三種模式在linux的安裝部署和數(shù)據(jù)存儲(chǔ)的總結(jié),希望可以相互交流相互提升。

    對(duì)于Centos7在安裝redis之前需要進(jìn)行一些常用工具的安裝:

    關(guān)閉防火墻

    正式安裝redis

    在redis進(jìn)行maketest時(shí)候會(huì)出現(xiàn)一系列的異常,有如下解決方案:

    用redis-server啟動(dòng)一下redis,做一些實(shí)驗(yàn)沒(méi)什么意義。

    要把redis作為一個(gè)系統(tǒng)的daemon進(jìn)程去運(yùn)行的,每次系統(tǒng)啟動(dòng),redis進(jìn)程一起啟動(dòng),操作不走如下:

    RDB和AOF是redis的一種數(shù)據(jù)持久化的機(jī)制。 持久化 是為了避免系統(tǒng)在發(fā)生災(zāi)難性的系統(tǒng)故障時(shí)導(dǎo)致的系統(tǒng)數(shù)據(jù)丟失。我們一般會(huì)將數(shù)據(jù)存放在本地磁盤(pán),還會(huì)定期的將數(shù)據(jù)上傳到云服務(wù)器。

    RDB  是redis的snapshotting,通過(guò)redis.conf中的save配置進(jìn)行設(shè)置,如 save 60 1000:

    AOF  是以appendonly方式進(jìn)行數(shù)據(jù)的儲(chǔ)存的,開(kāi)啟AOF模式后,所有存進(jìn)redis內(nèi)存的數(shù)據(jù)都會(huì)進(jìn)入os cache中,然后默認(rèn)1秒執(zhí)行一次fsync寫(xiě)入追加到appendonly.aof文件中。一般我們配置redis.conf中的一下指令:

    AOF和RDB模式我們一般在生產(chǎn)環(huán)境都會(huì)打開(kāi),一般而言,redis服務(wù)掛掉后進(jìn)行重啟會(huì)優(yōu)先家在aof中的文件。

    當(dāng)啟動(dòng)一個(gè)slave node的時(shí)候,它會(huì)發(fā)送一個(gè)PSYNC命令給master node,如果這是slave node重新連接master node,那么master node僅僅會(huì)復(fù)制給slave部分缺少的數(shù)據(jù);否則如果是slave node第一次連接master node,那么會(huì)觸發(fā)一次full resynchronization;

    開(kāi)始full resynchronization的時(shí)候,master會(huì)啟動(dòng)一個(gè)后臺(tái)線程,開(kāi)始生成一份RDB快照文件,同時(shí)還會(huì)將從客戶端收到的所有寫(xiě)命令緩存在內(nèi)存中。RDB文件生成完畢之后,master會(huì)將這個(gè)RDB發(fā)送給slave,slave會(huì)先寫(xiě)入本地磁盤(pán),然后再?gòu)谋镜卮疟P(pán)加載到內(nèi)存中。然后master會(huì)將內(nèi)存中緩存的寫(xiě)命令發(fā)送給slave,slave也會(huì)同步這些數(shù)據(jù)。

    slave node如果跟master node有網(wǎng)絡(luò)故障,斷開(kāi)了連接,會(huì)自動(dòng)重連。master如果發(fā)現(xiàn)有多個(gè)slave node都來(lái)重新連接,僅僅會(huì)啟動(dòng)一個(gè)rdb save操作,用一份數(shù)據(jù)服務(wù)所有slave node。

    從redis 2.8開(kāi)始,就支持主從復(fù)制的斷點(diǎn)續(xù)傳,如果主從復(fù)制過(guò)程中,網(wǎng)絡(luò)連接斷掉了,那么可以接著上次復(fù)制的地方,繼續(xù)復(fù)制下去,而不是從頭開(kāi)始復(fù)制一份。

    master node會(huì)在內(nèi)存中常見(jiàn)一個(gè)backlog,master和slave都會(huì)保存一個(gè)replica offset還有一個(gè)master id,offset就是保存在backlog中的。如果master和slave網(wǎng)絡(luò)連接斷掉了,slave會(huì)讓master從上次的replica offset開(kāi)始繼續(xù)復(fù)制,但是如果沒(méi)有找到對(duì)應(yīng)的offset,那么就會(huì)執(zhí)行一次resynchronization。

    master在內(nèi)存中直接創(chuàng)建rdb,然后發(fā)送給slave,不會(huì)在自己本地落地磁盤(pán)了,可以有如下配置:

    slave不會(huì)過(guò)期key,只會(huì)等待master過(guò)期key。如果master過(guò)期了一個(gè)key,或者通過(guò)LRU淘汰了一個(gè)key,那么會(huì)模擬一條del命令發(fā)送給slave。

    在redis.conf配置文件中,上面的參數(shù)代表至少需要3個(gè)slaves節(jié)點(diǎn)與master節(jié)點(diǎn)進(jìn)行連接,并且master和每個(gè)slave的數(shù)據(jù)同步延遲不能超過(guò)10秒。一旦上面的設(shè)定沒(méi)有匹配上,則master不在提供相應(yīng)的服務(wù)。

    sdown達(dá)成的條件很簡(jiǎn)單,如果一個(gè)哨兵ping一個(gè)master,超過(guò)了 is-master-down-after-milliseconds 指定的毫秒數(shù)之后,就主觀認(rèn)為master宕機(jī)

    sdown到odown轉(zhuǎn)換的條件很簡(jiǎn)單,如果一個(gè)哨兵在指定時(shí)間內(nèi),收到了 quorum 指定數(shù)量的其他哨兵也認(rèn)為那個(gè)master是sdown了,那么就認(rèn)為是odown了,客觀認(rèn)為master宕機(jī)

    如果一個(gè)slave跟master斷開(kāi)連接已經(jīng)超過(guò)了down-after-milliseconds的10倍,外加master宕機(jī)的時(shí)長(zhǎng),那么slave就被認(rèn)為不適合選舉為master

    (down-after-milliseconds * 10) + milliseconds_since_master_is_in_SDOWN_state

    每次一個(gè)哨兵要做主備切換,首先需要quorum數(shù)量的哨兵認(rèn)為odown,然后選舉出一個(gè)slave來(lái)做切換,這個(gè)slave還得得到majority哨兵的授權(quán),才能正式執(zhí)行切換;

    (2)SENTINEL RESET *,在所有sentinal上執(zhí)行,清理所有的master狀態(tài)

    (3)SENTINEL MASTER mastername,在所有sentinal上執(zhí)行,查看所有sentinal對(duì)數(shù)量是否達(dá)成了一致

    4.3.2 slave的永久下線

    讓master摘除某個(gè)已經(jīng)下線的slave:SENTINEL RESET mastername,在所有的哨兵上面執(zhí)行.

    redis的集群模式為了解決系統(tǒng)的橫向擴(kuò)展以及海量數(shù)據(jù)的存儲(chǔ)問(wèn)題,如果你的數(shù)據(jù)量很大,那么就可以用redis cluster。

    redis cluster可以支撐N個(gè)redis master,一個(gè)master上面可以掛載多個(gè)slave,一般情況我門(mén)掛載一個(gè)到兩個(gè)slave,master在掛掉以后會(huì)主動(dòng)切換到slave上面,或者當(dāng)一個(gè)master上面的slave都掛掉后,集群會(huì)從其他master上面找到冗余的slave掛載到這個(gè)master上面,達(dá)到了系統(tǒng)的高可用性。

    2.1 redis cluster的重要配置

    2.2 在三臺(tái)機(jī)器上啟動(dòng)6個(gè)redis實(shí)例

    將上面的配置文件,在/etc/redis下放6個(gè),分別為: 7001.conf,7002.conf,7003.conf,7004.conf,7005.conf,7006.conf

    每個(gè)啟動(dòng)腳本內(nèi),都修改對(duì)應(yīng)的端口號(hào)

    2.3 創(chuàng)建集群

    解決辦法是 先安裝rvm,再把ruby版本提升至2.3.3

    使用redis-trib.rb命令創(chuàng)建集群

    --replicas: 表示每個(gè)master有幾個(gè)slave

    redis-trib.rb check 192.168.31.187:7001 查看狀體

    3.1 加入新master

    以上相同配置完成后,設(shè)置啟動(dòng)腳本進(jìn)行啟動(dòng);然后用如下命令進(jìn)行node節(jié)點(diǎn)添加:

    3.2 reshard一些數(shù)據(jù)過(guò)去

    3.3 添加node作為slave

    3.4 刪除node

    四、redis的RDB和AOF兩種持久化機(jī)制優(yōu)缺點(diǎn)分析

    redis持久化的意義主要是為了做 災(zāi)難恢復(fù)、數(shù)據(jù)恢復(fù) 其實(shí)可以把它歸類到高可用的一個(gè)環(huán)節(jié)。

    RDB持久化機(jī)制,對(duì)redis中的 數(shù)據(jù) 執(zhí)行周期性的持久化。

    AOF機(jī)制對(duì) 每條寫(xiě)入命令 作為日志,以append-only的模式寫(xiě)入一個(gè)日志文件,在redis重啟對(duì)時(shí)候,可以通過(guò)回放AOF日志中寫(xiě)入的指令來(lái)重新構(gòu)建整個(gè)的數(shù)據(jù)集。

    如果同時(shí)使用AOF和RDB兩種持久化機(jī)制 ,那么在redis重啟的時(shí)候,會(huì)使用AOF來(lái)重新構(gòu)建數(shù)據(jù),因?yàn)锳OF中的數(shù)據(jù)更加的完整。

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

    (1)RDB會(huì)生成多個(gè)數(shù)據(jù)文件,每個(gè)數(shù)據(jù)文件都代表了某一個(gè)時(shí)刻中redis的數(shù)據(jù),這種多個(gè)數(shù)據(jù)文件的方式,非常適合做冷備。可以將文件存儲(chǔ)到云端,本地磁盤(pán)等等。

    (2)RDB機(jī)制對(duì)redis對(duì)外提供讀寫(xiě)服務(wù)時(shí)候的影響非常小,可以讓redis保持高性能,因?yàn)閞edis主進(jìn)程只需要fork一個(gè)子進(jìn)程,讓子進(jìn)程執(zhí)行磁盤(pán)IO操作來(lái)進(jìn)行RDB的持久化即可。

    (3)相對(duì)于AOF持久化機(jī)制來(lái)說(shuō),直接基于RDB數(shù)據(jù)文件來(lái)重啟和恢復(fù)redis進(jìn)程,更加的快速。

    缺點(diǎn):

    (1)如果想讓redis出現(xiàn)故障,盡可能的少丟失數(shù)據(jù),那么RDB沒(méi)有AOF好。因?yàn)橐话銇?lái)說(shuō),RDB數(shù)據(jù)快照文件,基本上都是每隔5分鐘或者更長(zhǎng)的時(shí)間,生成一次,這個(gè)時(shí)候,如果一旦發(fā)生宕機(jī),那么就會(huì)把這段時(shí)間內(nèi)的數(shù)據(jù)都丟失掉。

    (2)RDB每次在fork子進(jìn)程來(lái)執(zhí)行RDB快照數(shù)據(jù)文件生成的時(shí)候,如果數(shù)據(jù)文件特別大,可能會(huì)導(dǎo)致對(duì)客戶端提供的服務(wù)暫停數(shù)毫秒,或者甚至數(shù)秒。

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

    (1)AOF可以更好的保護(hù)數(shù)據(jù)不丟失,一般AOF會(huì)每隔1秒,通過(guò)一個(gè)后臺(tái)線程執(zhí)行fsync操作,最多丟失1秒鐘的數(shù)據(jù)。

    (2)AOF日志文件以append-only模式寫(xiě)入,所以沒(méi)有任何磁盤(pán)尋址的開(kāi)銷,寫(xiě)入性能非常高,而且文件不容易受損,即使文件尾部受損,也能很容易恢復(fù),打開(kāi)文件,把后面損壞的數(shù)據(jù)刪除即可。

    (3)AOF日志文件即使過(guò)大的時(shí)候,出現(xiàn)后臺(tái)重寫(xiě)操作,也不會(huì)影響客戶端的讀寫(xiě)。因?yàn)樵趓ewrite log 的時(shí)候,會(huì)對(duì)其中的指令進(jìn)行壓縮,創(chuàng)建出一份需要恢復(fù)數(shù)據(jù)對(duì)最小日志出來(lái),再創(chuàng)建新日志文件的時(shí)候,老日志文件還是會(huì)照常寫(xiě)入指令,當(dāng)新的日志文件生成好之后,會(huì)將舊日志文件中后面寫(xiě)入的指令合并到新的日志文件中,這個(gè)新的merge后的日志文件,會(huì)在ready的時(shí)候,與舊的日志文件進(jìn)行交換。之后就會(huì)把舊的日志文件刪除掉。

    (4)AOF文件中保存的是執(zhí)行的指令,所以這個(gè)特性非常適合做災(zāi)難性的誤操作緊急恢復(fù)。比如某人不小心用flushall命令清空了所有數(shù)據(jù),只要這個(gè)時(shí)候后臺(tái)rewrite還沒(méi)有發(fā)生,那么久可以立即拷貝這個(gè)AOF文件出來(lái),將最后一條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開(kāi)啟之后,Redis服務(wù)支持的寫(xiě)QPS會(huì)比RDB支持的寫(xiě)QPS低,因?yàn)锳OF一般會(huì)配置成每秒fsync一次日志文件,當(dāng)然每秒一次fsync的性能也還是很高的。

    (3)以前的AOF發(fā)生過(guò)bug,就是通過(guò)AOF記錄的日志,進(jìn)行數(shù)據(jù)恢復(fù)的時(shí)候,沒(méi)有恢復(fù)一模一樣的數(shù)據(jù)出來(lái),所以說(shuō),類似AOF這種較為復(fù)雜的基于命令日志/merge/回放的方式,比基于RDB每次持久化一份完整數(shù)據(jù)快照文件的方式,更加脆弱一些,容易有bug。不過(guò)AOF為了避免rewrite過(guò)程導(dǎo)致的bug,因此每次rewrite并不是基于舊的指令日志進(jìn)行merge,而是基于當(dāng)時(shí)內(nèi)存中的數(shù)據(jù)進(jìn)行指令的重新構(gòu)建,這樣健壯性能更好一些。

    綜合使用兩者,用AOF來(lái)保證數(shù)據(jù)盡可能的少丟失,作為第一選擇,其次在AOP丟失或者損壞的情況下,用RDB來(lái)更加快速的恢復(fù)數(shù)據(jù)。

    以上就是關(guān)于redis快照相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。


    推薦閱讀:

    prepositions翻譯

    一篇nature子刊能進(jìn)什么學(xué)校

    bread翻譯(break翻譯)

    游戲推廣公司(游戲推廣公司是做什么的)

    社區(qū)隸屬于什么部門(mén)(社區(qū)隸屬于哪個(gè)部門(mén))