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

    redis快照(redis快照持久化)

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

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

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

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

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

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

    本文目錄:

    redis快照(redis快照持久化)

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

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

    二、redis可以持久化嗎

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

     

    1、快照(snapshots)

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

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

     

    工作原理

    Redis forks.

    子進程開始將數(shù)據(jù)寫到臨時RDB文件中。

    當子進程完成寫RDB文件,用新文件替換老文件。

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

     

    2、APPEND ONLY MODE(AOF)

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

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

    你可以在配置文件中打開AOF模式:

     

    選項:

    1、appendfsync no

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

    2、appendfsync everysec

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

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

    三、緩存-redis 三種模式搭建和運行原理

    標簽: redis 緩存 主從 哨兵 集群

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

    對于Centos7在安裝redis之前需要進行一些常用工具的安裝:

    關(guān)閉防火墻

    正式安裝redis

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

    用redis-server啟動一下redis,做一些實驗沒什么意義。

    要把redis作為一個系統(tǒng)的daemon進程去運行的,每次系統(tǒng)啟動,redis進程一起啟動,操作不走如下:

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

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

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

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

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

    開始full resynchronization的時候,master會啟動一個后臺線程,開始生成一份RDB快照文件,同時還會將從客戶端收到的所有寫命令緩存在內(nèi)存中。RDB文件生成完畢之后,master會將這個RDB發(fā)送給slave,slave會先寫入本地磁盤,然后再從本地磁盤加載到內(nèi)存中。然后master會將內(nèi)存中緩存的寫命令發(fā)送給slave,slave也會同步這些數(shù)據(jù)。

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

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

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

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

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

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

    sdown達成的條件很簡單,如果一個哨兵ping一個master,超過了 is-master-down-after-milliseconds 指定的毫秒數(shù)之后,就主觀認為master宕機

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

    如果一個slave跟master斷開連接已經(jīng)超過了down-after-milliseconds的10倍,外加master宕機的時長,那么slave就被認為不適合選舉為master

    (down-after-milliseconds * 10) + milliseconds_since_master_is_in_SDOWN_state

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

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

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

    4.3.2 slave的永久下線

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

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

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

    2.1 redis cluster的重要配置

    2.2 在三臺機器上啟動6個redis實例

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

    每個啟動腳本內(nèi),都修改對應(yīng)的端口號

    2.3 創(chuàng)建集群

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

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

    --replicas: 表示每個master有幾個slave

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

    3.1 加入新master

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

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

    3.3 添加node作為slave

    3.4 刪除node

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

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

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

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

    如果同時使用AOF和RDB兩種持久化機制 ,那么在redis重啟的時候,會使用AOF來重新構(gòu)建數(shù)據(jù),因為AOF中的數(shù)據(jù)更加的完整。

    優(yōu)點:

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

    (2)RDB機制對redis對外提供讀寫服務(wù)時候的影響非常小,可以讓redis保持高性能,因為redis主進程只需要fork一個子進程,讓子進程執(zhí)行磁盤IO操作來進行RDB的持久化即可。

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

    缺點:

    (1)如果想讓redis出現(xiàn)故障,盡可能的少丟失數(shù)據(jù),那么RDB沒有AOF好。因為一般來說,RDB數(shù)據(jù)快照文件,基本上都是每隔5分鐘或者更長的時間,生成一次,這個時候,如果一旦發(fā)生宕機,那么就會把這段時間內(nèi)的數(shù)據(jù)都丟失掉。

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

    優(yōu)點:

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

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

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

    (4)AOF文件中保存的是執(zhí)行的指令,所以這個特性非常適合做災(zāi)難性的誤操作緊急恢復(fù)。比如某人不小心用flushall命令清空了所有數(shù)據(jù),只要這個時候后臺rewrite還沒有發(fā)生,那么久可以立即拷貝這個AOF文件出來,將最后一條flushall命令刪除,然后再將AOF文件放回去,就可以通過恢復(fù)機制,自動的恢復(fù)所有數(shù)據(jù)了。

    缺點:

    (1)對于同一份數(shù)據(jù)來說,AOF的日志文件通常要比RDB的數(shù)據(jù)快照文件要大。

    (2)AOF開啟之后,Redis服務(wù)支持的寫QPS會比RDB支持的寫QPS低,因為AOF一般會配置成每秒fsync一次日志文件,當然每秒一次fsync的性能也還是很高的。

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

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

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


    推薦閱讀:

    prepositions翻譯

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

    bread翻譯(break翻譯)

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

    社區(qū)隸屬于什么部門(社區(qū)隸屬于哪個部門)