Redis持久化

redis支持數(shù)據(jù)持久化,兩種方式:

  • 快照 RDB
  • 寫日志 AOF

RDB

經(jīng)過RDB之后,redis會將內(nèi)存中的數(shù)據(jù)創(chuàng)建一份快照到硬盤中,稱為RDB文件(二進制),當redis重新啟動時,會加載硬盤中的RDB文件,加載到內(nèi)存中完成數(shù)據(jù)恢復

RDB持久化數(shù)據(jù)的方式

1.save同步

  • 在save的同時,其它命令會阻塞,會阻塞主線程
  • 如果存在老的RDB文件,會先創(chuàng)建一個臨時文件,然后對老文件進行替換

2.bgsave異步

  • 調(diào)用bgsave后,會調(diào)用linux的fork()函數(shù),創(chuàng)建一個子進程
  • 如果存在老的RDB文件,會先創(chuàng)建一個臨時文件,然后對老文件進行替換

自動觸發(fā)達到如下條件觸發(fā)

second (時間) changes (修改次數(shù))
900 1
300 10
60 10000
RDB相關(guān)配置
  • dbfilename dump-${port}.rdb // 使用端口區(qū)分
  • dir /redis/data // 使用一個大的硬盤的目錄
  • stop-writes-on-bgsave-error yes // bgsave發(fā)生錯誤停止寫入
  • rdbcompression yes // 使用壓縮的配置 主從復制拷貝快
  • rdbchecksum yes // 采用校驗和的方式
額外觸發(fā)生成rdb文件
  • 主從復制時機的全量復制,master節(jié)點會執(zhí)行bgsave 生成rdb文件
  • debug reload // debug 級別的重啟 不清空內(nèi)存的方式重啟
  • shutdown // 關(guān)閉時 shutdown save 會生成rdb文件
  • flushDB 、 flushAll

缺點:

  • 耗時
  • 耗性能
  • 不可控,容易丟失數(shù)據(jù)

AOF

通過日志方式將redis中的寫命令進行日志記錄,保存在硬盤文件中,實質(zhì)是將寫命令寫在硬盤的緩沖區(qū)中,再根據(jù)相關(guān)策略把數(shù)據(jù)刷新到磁盤中,當redis服務器啟動時候,執(zhí)行硬盤中的日志文件以恢復redis中的數(shù)據(jù)

AOF策略

1.always

注:執(zhí)行每條寫命令都將寫命令寫到磁盤中

  • 不丟失數(shù)據(jù),IO開銷較大

2.everysec

注:每秒將數(shù)據(jù)從緩沖區(qū)刷到磁盤中,可能會丟失一秒的數(shù)據(jù)

  • 每秒一次,保護硬盤,可能會丟失一秒的數(shù)據(jù)

3.no

注:寫命令何時刷新的磁盤中,由操作系統(tǒng)來決定

  • 系統(tǒng)策略自動寫入
AOF重寫

1.重寫的作用

  • 減少磁盤占用
  • 加速AOF恢復速度

2.重寫實現(xiàn)方式

客戶端發(fā)送一條bgrewriteaof命令后,redis會fork一個子進程完成AOF重寫操作

AOF配置項:

  • auto-aof-rewrite-min-size 默認64MB AOF文件重寫需要的尺寸,AOF多大時開啟重寫
  • auto-aof-rewrite-percentage 默認100 AOF文件增長率

同時滿足觸發(fā)重寫

3.AOF重寫原理

AOF重寫不會讀取老的AOF文件,而是根據(jù)當前服務器的狀態(tài)生成一份新的AOF文件,將老的AOF文件進行替換

4.AOF相關(guān)配置

appendonly  yes  # 開啟AOF
appendfilename aof-${節(jié)點名稱}.aof # AOF文件名
appendfsync everysec # AOF策略 每秒寫入
dir  /redis/data  # AOF文件所在目錄
no-appendfsync-no-rewrite  yes  # 在執(zhí)行重寫時不進行AOF操作
auto-aof-rewrite-percentage  100  # AOF重寫配置(見上文)
auto-aof-rewrite-min-size  64MB  # AOF重寫配置(見上文)

RDB與AOF策略

關(guān)閉RDB自動執(zhí)行配置 打開AOF(如果只是純作為緩存使用可以不開AOF),對重寫集中管理(預留30%的內(nèi)存),使用每秒everysec

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容