Redis的持久化——RDB


 
        

前面說到redis的三大特性:緩存、分布式內存數據庫、持久化,所以今天將為大家介紹redis的兩種數據持久化技術RDB和AOF, 先介紹RDB吧。

一、RDB是什么?

  1、RDB全稱redis database,在指定的時間間隔內將內存中的數據集快照寫入磁盤,也就是行話講的Snapshot快照,它恢復時 直接將快照文件直接讀到內存里;

  2、Redis會單獨創建(fork)一個子進程來進行持久化,會先將數據寫入到一個臨時文件中,主進程是不進行任何IO操作的,它

 

就確保了極高的性能;如果需要進行大規模數據的恢復,且對於數據恢復的完整性不是非常敏感,那RDB方式比AOF方式更加

的高效。RDB的缺點是最后一次持久化后的數據可能丟失。

二、Fork

       Fork的作用是復制一個與當前進程一樣的進程。新進程的所有數據(變量、環境變量、程序計數器等)數值都和原進程一 致,但是是一個全新的進程,並作為原進程的子進程。

三、RDB持久化數據在dump.rmb文件中。

四、配置位置

 
        

1、save sec changed

     在一段時間(sec秒)內,數據修改的次數達到changed次觸發快照,可以寫多條。

     補充:save “”表示不設置觸發條件  2、stop-writes-on-bgsave-error yes

     在異步快照持久化數據是停止往redis內存寫入數據。

   3、rdbcompression yes

     對於儲存到磁盤的快照,是否啟用LZF算法進行壓縮存儲,yes則啟用,但會消耗一定CPU。

   4、rdbchecksum yes

      在存儲快照后,是否讓redis使用CRC64算法來進行數據校驗,但是會增加約10%的性能消耗。

   5、dbfilename dump.rdb

     設置快照存儲的位置。

   6、dir ./

      路徑。

五、如何觸發RDB快照

  1、配置文件中默認的快照配置

 
        

2、命令save或者是bgsave

    - save:save時只管保存,其他不管,全部堵塞;

    - bgsave:redis會在后台異步進行快照操作,快照同時還可以響應客戶端請求。可以通過lastsave命令獲取最后一次成

功執行快照的時間。

  3、執行flushall命令,也會產生dump.rdb文件,但里面是空的,無意義。

六、如何恢復數據

  1、將備份文件dump.rdb移動到redis安裝目錄並啟動服務即可;

  2、config get dir獲取目錄。

七、優勢

  1、適合大規模的數據恢復;

  2、對數據完整性和一致性要求不高。

八、劣勢

  1、在一定間隔時間做一次備份,所以如果redis意外down掉的話,就會丟失最后一次快照后的所有修改;

  2、Fork的時候,內存中的數據被克隆了一份,大致2倍的膨脹性需要考慮。

九、如何停止

  動態所有停止rdb保存規則的方法:redis-cli config set save “”

十、小結

  1、rdb是一個非常緊湊的文件;

  2、rdb在保存rdb文件時父進程唯一需要做的就是fork出一個子進程,接下來的工作全部由子進程來做,父進程不需要再做

其他IO操作,所以rdb持久化方式可以最大化redis的性能;

  3、與AOF相比,在恢復大的數據集的時候,rdb方式會更快些;

  4、由於可能丟失最后一次快照的修改數據,所以數據丟失風險大;

  5、rdb需要經常fork子進程來保存數據集到硬盤上,當數據集比較大的時候,fork的過程非常耗時,可能會導致redis在一些

毫秒級不能響應客戶端請求。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM