0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Redis持久化分為兩種:RDB和AOF

阿銘linux ? 來源:阿銘linux ? 2023-02-21 09:22 ? 次閱讀

前言

Redis持久化,一個老掉牙的問題,但是面試官就是喜歡問。這也是我們學(xué)Redis必會的一個知識點(diǎn)。Redis作為內(nèi)存數(shù)據(jù)庫,它工作時,數(shù)據(jù)都保存在內(nèi)存里,這也是它為什么很快的一個原因。但存到內(nèi)存里肯定是有丟數(shù)據(jù)的風(fēng)險,所以Redis是有設(shè)計(jì)持久化的。Redis持久化分為兩種:RDB和AOF。

RDB持久化

RDB(Redis DataBase),是redis默認(rèn)的存儲方式,RDB持久化其實(shí)就是將內(nèi)存的數(shù)據(jù)直接做了一份快照到磁盤上。觸發(fā)RDB持久化的方式有:

符合配置的快照保存規(guī)則(配置文件里save開頭的配置);

執(zhí)行save或者bgsave命令;

執(zhí)行flushall命令;

執(zhí)行主從復(fù)制操作 (第一次)。

配置文件redis.conf中,save開頭的配置為RDB持久化相關(guān)配置。具體解釋如下:

save "" 表示關(guān)閉rdb持久化;

save 3600 1 表示每1小時至少有1個key改變,就觸發(fā)一次持久化可以寫多個條件;

save 3600 1 300 100 60 10000 這里定義了三個策略,它們相互之間為或的關(guān)系。

AOF持久化

AOF(AppendOnly File)持久化,是其將Reids執(zhí)行過的所有寫指令記錄下來,保存到日志里,類似MySQL的bin-log。默認(rèn)配置文件里該持久化方式是關(guān)閉的,需要將配置修改為:

appendonly yes
由于AOF是將Redis服務(wù)的寫操作日志寫到日志文件里,當(dāng)寫操作非常頻繁時,那么它對磁盤也會造成很大的壓力。所以,AOF的磁盤數(shù)據(jù)落地(fsync函數(shù))也有三個策略: Always:表示只要有寫入就會調(diào)用fsync函數(shù); Everysec:表示每秒調(diào)用fsync函數(shù)一次; No:表示不調(diào)用fscyn函數(shù),完全跟著系統(tǒng)走;

16191ff2-b173-11ed-bfe3-dac502259ad0.png

建議選擇everysec,比較保守一些。

AOF重寫

AOF文件如果不做干預(yù),它會一直增漲,直到將你的磁盤寫滿。好在Redis給AOF提供了重寫機(jī)制。我們可以直接執(zhí)行如下命令,進(jìn)行AOF重寫:

bgrewriteaof;
執(zhí)行完該命令后,AOF文件會根據(jù)已經(jīng)持久化的RDB文件和現(xiàn)有AOF文件重新整理,它會把無用的寫日志清空,最終達(dá)到瘦身目的。 當(dāng)然,AOF還有一個重寫的配置,兩個參數(shù)

參數(shù) 說明
auto-aof-rewrite-min-size AOF文件必須要不低于這個尺寸時才會觸發(fā)重寫,后面的每次重寫就不會根據(jù)這個變量了(根據(jù)上一次重寫完成之后的大小)。此變量僅初始化啟動redis有效
auto-aof-rewrite-percentage 如果該數(shù)值定義為80,則表示當(dāng)AOF文件增長的尺寸超過上次大?。ˋOF文件上次重寫后的大小會被記錄下來)百分80時就會觸發(fā)重寫操作

RDB和AOF如何選

在實(shí)際生產(chǎn)環(huán)境中,根據(jù)數(shù)據(jù)量、應(yīng)用對數(shù)據(jù)的安全要求、預(yù)算限制等不同情況,會有各種各樣的持久化策略。 如,完全不使用任何持久化、使用RDB持久化或AOF持久化的一種,或同時開啟快照持久化和AOF持久化等。此外,持久化的選擇必須與Redis的主從策略一起考慮,因?yàn)橹鲝膹?fù)制與持久化同樣具有數(shù)據(jù)備份的功能,而且主機(jī)Master和從機(jī)Slave可以獨(dú)立的選擇持久化方案。

如果Redis中的數(shù)據(jù)完全丟棄也沒有關(guān)系(如Redis完全用作DB層數(shù)據(jù)的cache),那么無論是單機(jī),還是主從架構(gòu),都可以不進(jìn)行任何持久化。 在單機(jī)環(huán)境下(對于個人開發(fā)者,這種情況可能比較常見),如果可以接受十幾分鐘或更多的數(shù)據(jù)丟失,選擇RDB持久化對Redis的性能更加有利,如果只能接受秒級別的數(shù)據(jù)丟失,應(yīng)該選擇AOF。

但在多數(shù)情況下,我們都會配置主從環(huán)境,Slave的存在既可以實(shí)現(xiàn)數(shù)據(jù)的熱備,也可以進(jìn)行讀寫分離分擔(dān)Redis讀請求,以及在Master宕掉后繼續(xù)提供服務(wù)。在這種情況下,一種可行的做法是:

Master:完全關(guān)閉持久化,這樣可以讓Master的性能達(dá)到最好;

Slave:關(guān)閉RDB持久化,開啟AOF(如果對數(shù)據(jù)安全要求不高,開啟RDB持久化關(guān)閉AOF也可以),并定時對持久化文件進(jìn)行備份(如備份到其他文件夾,并標(biāo)記好備份的時間)。然后關(guān)閉AOF的自動重寫,然后添加定時任務(wù),在每天Redis閑時(如凌晨12點(diǎn))調(diào)用bgrewriteaof。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3800

    瀏覽量

    64402
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    811

    瀏覽量

    26580
  • MYSQL數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    0

    文章

    96

    瀏覽量

    9392
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    376

    瀏覽量

    10878

原文標(biāo)題:一文搞懂Redis持久化

文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何開啟RDB持久化方式

    ? RDB快照(Redis DataBase) RDB是一快照存儲持久化方式,具體就是將Redis
    的頭像 發(fā)表于 06-25 11:52 ?897次閱讀
    如何開啟<b class='flag-5'>RDB</b><b class='flag-5'>持久</b>化方式

    Redis是什么?簡述它的優(yōu)缺點(diǎn)?

    /s,寫的速度是81000次/s。 支持?jǐn)?shù)據(jù)持久化,支持AOFRDB兩種持久化方式。 支持事務(wù), Re
    的頭像 發(fā)表于 10-09 10:37 ?823次閱讀

    Redis持久化機(jī)制介紹

    Redis持久化機(jī)制? 為了能夠重用Redis數(shù)據(jù),或者防止系統(tǒng)故障,我們需要將Redis中的數(shù)據(jù)寫入到磁盤空間中,即持久化。
    的頭像 發(fā)表于 10-09 11:44 ?487次閱讀
    <b class='flag-5'>Redis</b><b class='flag-5'>持久</b>化機(jī)制介紹

    Redis持久RDB方式介紹

    Redis持久Redis是一個內(nèi)存數(shù)據(jù)庫,為了保證數(shù)據(jù)的持久性,它提供了兩種持久化方案:
    的頭像 發(fā)表于 10-09 14:56 ?512次閱讀
    <b class='flag-5'>Redis</b><b class='flag-5'>持久</b>化<b class='flag-5'>RDB</b>方式介紹

    Redis持久AOF原理學(xué)習(xí)

    。AOF文件中存儲的就是序列化后的reids命令。 AOF同步和RDB類似之處在于都是采用fork進(jìn)程來處理: 通過這張圖,我們知道了Redis是將客戶端傳入的命令直接寫入
    的頭像 發(fā)表于 10-09 15:02 ?398次閱讀
    <b class='flag-5'>Redis</b><b class='flag-5'>持久</b>化<b class='flag-5'>AOF</b>原理學(xué)習(xí)

    redis持久化方式有幾種及配置

    Redis是一內(nèi)存數(shù)據(jù)庫,為了避免數(shù)據(jù)丟失,需要將數(shù)據(jù)持久化到磁盤上。Redis提供了兩種持久
    的頭像 發(fā)表于 12-04 11:09 ?646次閱讀

    redis兩種持久化方式的區(qū)別

    的完整性和一致性。 Redis提供了兩種持久化方式:RDBRedis Database)和AOF
    的頭像 發(fā)表于 12-04 11:12 ?527次閱讀

    redis持久化方式RDBAOF的區(qū)別

    Redis 是一個高性能的鍵值對數(shù)據(jù)庫,提供了兩種持久化方式:RDBAOF。RDB 是將
    的頭像 發(fā)表于 12-04 16:25 ?784次閱讀

    redis持久化機(jī)制和如何實(shí)現(xiàn)持久

    Redis是一款高性能的非關(guān)系型數(shù)據(jù)庫,其持久化機(jī)制是保證數(shù)據(jù)在重啟后仍能夠保存的關(guān)鍵。Redis提供了兩種方式來實(shí)現(xiàn)持久化:
    的頭像 發(fā)表于 12-05 10:02 ?466次閱讀

    redis持久化機(jī)制優(yōu)缺點(diǎn)

    Redis是一個基于內(nèi)存的高性能鍵值存儲系統(tǒng),它提供了多種持久化機(jī)制來保證數(shù)據(jù)的可靠性。本文將詳細(xì)介紹Redis持久化機(jī)制,并分析其優(yōu)缺點(diǎn)。 一、
    的頭像 發(fā)表于 12-05 10:03 ?726次閱讀

    redis里數(shù)據(jù)什么時候持久

    Redis是一開源的高性能、非關(guān)系型內(nèi)存數(shù)據(jù)庫,它使用了鍵值對存儲數(shù)據(jù),并且支持多種數(shù)據(jù)結(jié)構(gòu)。 Redis提供了持久化機(jī)制,以確保在服務(wù)器重啟后數(shù)據(jù)不會丟失。
    的頭像 發(fā)表于 12-05 10:05 ?451次閱讀

    云容器redis持久化配置

    丟失。 Redis提供了不同的持久化機(jī)制,可以根據(jù)需要進(jìn)行配置。本文將詳細(xì)介紹云容器中Redis持久化配置及其相關(guān)配置項(xiàng)。 一、Redis
    的頭像 發(fā)表于 12-05 10:07 ?512次閱讀

    redis數(shù)據(jù)會自動清除嗎

    將數(shù)據(jù)以二進(jìn)制格式快照的形式保存到磁盤上,以便在重啟時恢復(fù)數(shù)據(jù)。這個功能可以通過配置文件或者命令來啟用,并可以設(shè)置自動觸發(fā)或定時觸發(fā)。但需要注意的是,RDB持久化是異步的,所以在Redis意外終止時可能會丟失最近修改的數(shù)據(jù)。
    的頭像 發(fā)表于 12-05 10:13 ?2396次閱讀

    redis持久rdbaof一起用好處

    Redis是一個流行的內(nèi)存數(shù)據(jù)庫,它通過使用不同的持久化機(jī)制來確保數(shù)據(jù)的持久性。RDBAOFRedi
    的頭像 發(fā)表于 12-05 10:17 ?774次閱讀

    Redis緩存與Memcached的比較

    關(guān)鍵特性和差異: 1. 數(shù)據(jù)存儲 Redis: Redis是一個開源的鍵值存儲,支持多種數(shù)據(jù)結(jié)構(gòu),如字符串、列表、集合、有序集合、散列、位圖、超日志和地理空間索引。 它支持持久化,可以將內(nèi)存中的數(shù)據(jù)保存到磁盤,支持
    的頭像 發(fā)表于 12-18 09:33 ?150次閱讀