Redis持久化的兩種方式

前言 

  Redis 是內存數據庫,若是不將內存中的數據保存到磁盤,進程退出的時候內存中的數據也會被清除。爲了解決該問題,Redis 持久化有兩種方式,分別是RDB和AOF。下面會比較詳細介紹這兩種持久化方式。redis

RDB方式

  RDB持久化既能夠手動執行,也能夠根據服務器配置選項按期執行,該功能就是把某個時間點的內存數據狀態保存到一個通過壓縮的二進制文件(即 RDB文件)中。數據庫

  一、配置選項執行 

    在redis.conf文件中配置以下:只要知足如下三個條件中的任何一個就會觸發持久化操做:緩存

    1. 服務器900秒以內,對數據庫進行至少1次修改
    2. 服務器300秒以內,對數據庫進行至少10次修改
    3. 服務器60秒以內,對數據庫進行至少10000次修改

  二、手動執行

  手動執行,能夠在客戶端中直接運行save、bgsave、bgrewriteaof命令觸發持久化操做。save命令執行是同步操做,Redis服務器會被阻塞, 因此客戶端請求會被阻塞;bgsave命令執行是異步操做,會建立一個子進程來完成RDB持久化操做,因此當用bgsave建立RDB文件的過程,服務器仍然能夠處理客戶端的請求;bgrewriteaof命令跟bgsave差很少。bash

  三、RDB小結

  RDB方式持久化是在某個時間點把內存中key-value數據同步到RDB文件中。服務器

AOF方式

  AOF 持久化是經過把Redis 服務器所執行的寫命令追加到AOF文件的方式來實現的。AOF持久化功能的實現分爲命令追加、文件寫入和文件同步三步驟。app

  一、開啓AOF

  在redis.conf文件中配置以下:異步

appendonly yes

appendfilename "appendonly.aof"

  默認是no關閉狀態。函數

  二、命令追加

  服務器在執行完一個寫命令以後,會以協議格式將被執行的寫命令追加到服務器狀態的aof_buf緩存區的末尾。 操作系統

三、文件寫入

服務器會調用flushAppendOnlyFile函數,並根據服務器配置的appendfsync選項的值類決定是否把aof_buf緩存區的數據寫入保存到AOF文件中。線程

appendfsync 選項的值 flushAppendOnlyFile 函數行爲
always 將aof_buf緩衝區中的全部內容寫入並同步到AOF文件
everysec

將aof_buf緩衝區中的全部內容寫入到AOF文件,若是上次同步AOF 文件的時間距離如今超過一秒鐘,

那麼再次對AOF文件進行同步,而且這個同步操做是用一個線程專門負責執行的

no 將aof_buf緩衝區中的全部內容寫入到AOF文件,但不對AOF文件進行同步,什麼時候同步由操做系統來決定

 

 

 

 

 

默認值是 everysec。

四、文件同步

  爲了提升文件的寫入效率,如今操做系統中,當用戶調用write函數,將一些數據寫入到文件的時候,操做系統一般會將寫入的數據暫時保存咋一個內存緩衝區裏面,等到緩衝區的空間唄填滿、或者超過指定的閥值後,才真正的將緩衝區中的數據寫入到磁盤中。

相關文章
相關標籤/搜索