redis介紹(3)RDB和AOF原理解析

簡單科普一下redis的概念:(會的可忽略)redis

  • Redis的概念  

    redis基於內存的Key Value類型的NoSQL數據庫.數據庫

  •  Redis的特色
     1. Redis是一個高性能的Key/Value數據庫     2. 基於內存     3. 數據類型豐富     4. 持久化     5. 訂閱/發佈模型 
  •  RedisMemcache區別
         Redis是一個內存型數據庫產品,Memcache是一個內存型緩存產品,Redis 以對內存中的數據進行持久化,Memcache不行

 


 

下面來搞一下redis的持久化的一些知識

    補充:緩存

      Redis中數據存儲模式有2種:cache-only,persistence安全

      • cache-only即只作爲「緩存」服務,不持久數據,數據在服務終止後將消失,此模式下也將不存在「數據恢復」的手段,是一種安全性低/效率高/容易擴展的方式;
      • persistence即爲內存中的數據持久備份到磁盤文件,在服務重啓後能夠恢復,此模式下數據相對安全。

      對於persistence持久化存儲,Redis提供了兩種持久化方法   bash

      • Redis DataBase(簡稱RDB)
      • Append-only file (簡稱AOF)

    注意:除了這兩種方法,Redis在早起的版本還存在虛擬內存的方法,如今已經被廢棄。服務器

    

redis的持久化方案有兩種,下面詳細講一下:

    redis持久化方式分爲兩種:RDB快照和AOF方式(默認爲RDB模式),當Redis服務器重啓的時候,會自動恢復數據,優先從AOF中恢復,其次才從RDB中恢復app

  RDB原理:性能

    RDB:快照方式,容許你每隔一段時間對內存數據作一次快照而後存儲到硬盤中。該方式是Redis默認的持久化方式。spa

      優勢:使用單獨子進程來進行持久化,主進程不會進行任何IO操做,保證了redis的高性能 
      缺點:RDB是間隔一段時間進行持久化,若是持久化之間redis發生故障,會發生數據丟失。因此這種方式更適合數據要求不嚴謹的時候操作系統

    

    RDB能夠經過在配置文件中配置時間或者改動鍵的個數來定義快照條件,編輯配置文件redis.conf,找到

      save 900 1  #15分鐘以內至少有一個建被更改則進行快照
      save 300 10  #5分鐘以內至少有10個建被更改則進行快照
      save 60 10000  #1分鐘以內至少有1000個建被更改則進行快照
    

    他們之間是或的關係,RDB持久化到磁盤的文件默認路徑是在當前目錄,文件名爲dump.rdb,你能夠經過配置文件配置dir和dbfilename來指定文件目錄和文件名稱,RDB文件還能夠進行壓縮,你能夠經過配置rdbcompression參數來進行壓縮。

      

 

    

      

       RDB機制的完成流程
        1 redis的主進程 fork子進程 完成RDB寫操做
        2 redis的主進程對提供服務,子進程會把當前數據庫中的數據,寫入臨時文件
        3 當臨時文件寫好以後,覆蓋原有的RDB快照文件

 

    AOF原理(增量式複製 日誌式複製)

      AOF方式原理:AOF就能夠作到全程持久化,Redis每執行一個修改數據的命令,都會把這個命令添加到AOF文件中,當Redis重啓時,將會讀取AOF文件進行「重放」以恢復到 Redis關閉前的最後時刻。

      注意:  默認redis會使用RDB的方式進行持久化.redis中即便用RDB 又使用AOF ,redis會應用AOF

      

      AOF運行機制

 

        

         AOF比RDB更加安全,記錄每一次的寫操做.可是若是在寫的過程當中掉電,也會丟失少許數據

 

        

      AOF:經過將發送到服務器的寫操做命令記錄下來,造成AOF文件,文件默認名稱是appendonly.aof,能夠經過appendfilename來指定文件名稱。你能夠經過配置文件打開AOF功能

 

      appendonly yes

 

      AOF的原理是直接把用戶插入到服務器的命令追加到結尾,那麼文件會原來越大,一些重複的寫命令也會愈來愈多,這時,咱們能夠利用BGREWRITEAOF 命令來重寫AOF,重寫的配置以下:

 

      auto-aof-rewrite-percentage 100 #aof文件大小超過上次重寫時文件大小的百分之幾開始重寫,若是以前沒有寫過,則根據啓動時文件大小。

      auto-aof-rewrite-min-size 64mb #限制容許重寫時的最小文件大小。

 

      AOF在同步內存數據到磁盤上時,並非立刻把文件寫如到磁盤中,而是先把文件緩存到系統,而後每隔30秒將文件寫入到磁盤中,咱們能夠在配置文件中配置同步的策略

 

      appendfsync always #每次都同步,保證數據不會丟失,但會慢
      appendfsync everysec #每秒同步,系統默認同步策略
      appendfsync no #不主動同步,由操做系統決定,快,但數據容易丟失


  

注意:

    Redis持久化的問題:
      假定初始Redis使用RDB進行持久化 , 切換AOF進行持久化.問題?
        RDB --- bgsave ---- dump.rdb
        AOP --- appendonly.aof 獲取數據

    熱切換:
      改變redis.conf文件 appendonly yes

相關文章
相關標籤/搜索