刨根問底Redis——Redis的持久化機制

 1、持久化

咱們前兩章已經講了,redis是內存型的數據庫,他之因此快是由於數據存儲在內存。那麼數據存儲在內存會有什麼問題呢?固然就是當服務重啓或者服務器宕機內存數據就被清除,咱們就沒法訪問以前存儲的數據了。那麼怎麼解決這個問題呢?固然就是使用持久化技術面試

持久化(Persistence),即把數據(如內存中的對象)保存到可永久保存的存儲設備中(如磁盤)。持久化是將程序數據在持久狀態和瞬時狀態間轉換的機制。好比JDBC就是一種持久化機制。文件IO也是一種持久化機制。redis

redis也是一個支持持久化的內存數據庫,也就是說redis須要常常將內存中的數據同步到磁盤來保證持久化,持久化能夠避免因進程退出而形成數據丟失;數據庫

redis支持兩種持久化方式,RDBAOF設計模式

2、RDB持久化方式

RDB持久化把當前進程數據生成快照(.rdb)文件保存到硬盤的過程,有手動觸發自動觸發服務器

2.1 手動觸發

手動觸發有save和bgsave兩命令多線程

 save****命令:阻塞當前Redis,直到RDB持久化過程完成爲止,若內存實例比較大會形成長時間阻塞,線上環境不建議用它架構

 bgsave****命令:redis進程執行fork操做建立子進程,由子線程完成持久化,阻塞時間很短(微秒級),是save的優化,在執行redis-cli shutdown關閉redis服務時,若是沒有開啓AOF持久化,自動執行bgsave;併發

bgsave流程以下:app

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

2.2 RDB持久化命令

命令:config set dir /usr/local  //設置rdb文件保存路徑分佈式

備份:bgsave  //將dump.rdb保存到usr/local下

恢復:將dump.rdb放到redis安裝目錄與redis.conf同級目錄,重啓redis便可

2.3 恢復和異常流程演示

1,查看啓動目錄,沒有dump文件

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

二、set值

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

三、執行shutdown命令關掉服務,查看目錄,已經生成對應的dump文件。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

四、重啓redis服務,發現數據還存在

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

五、執行shutdown命令關掉服務,並把dump文件刪除

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

六、啓動redis在進行查看,發現存儲的數據已經不存在了。

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

2.4 RDB持久化的優缺點

優勢:

  • 壓縮後的二進制文,適用於備份、全量複製,用於災難恢復
  • 加載RDB恢復數據遠快於AOF方式

缺點:

  • 沒法作到實時持久化,每次都要建立子進程,頻繁操做成本太高
3、AOF持久化

針對RDB不適合實時持久化,redis提供了AOF持久化方式來解決

開啓方式就是在redis.conf設置:appendonly yes  (默認不開啓,爲no)

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

默認文件名:appendfilename "appendonly.aof" 

3.1 AOF持久化原理

  1. 全部的寫入命令(set hset)會append追加到aof_buf緩衝區中
  2. AOF緩衝區向硬盤作sync同步
  3. 隨着AOF文件愈來愈大,需按期對AOF文件rewrite重寫,達到壓縮
  4. 當redis服務重啓,可load加載AOF文件進行恢復

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

3.2 AOF持久化配置

   
配置信息 含義
appendonly yes 啓用aof持久化方式
appendfsync always 每收到寫命令就當即強制寫入磁盤,最慢的,可是保證徹底的持久化,不推薦使用
appendfsync everysec 每秒強制寫入磁盤一次,性能和持久化方面作了折中,推薦
no-appendfsync-on-rewrite  yes 正在導出rdb快照的過程當中,要不要中止同步aof
auto-aof-rewrite-percentage 100 aof文件大小比起上次重寫時的大小,增加率100%時,重寫
auto-aof-rewrite-min-size 64mb aof文件,至少超過64M時,重寫

3.3 AOF持久化恢復

  1. 設置appendonly yes;

  2. 將appendonly.aof放到dir參數指定的目錄;

  3. 啓動Redis,Redis會自動加載appendonly.aof文件。

4、Redis持久化加載機制順序

若是同時都開啓了AOF和RDB 兩種持久化方式,那麼加載順序及流程以下

  1. 當 AOF 和 RDB 文件同時存在時,優先加載 AOF
  2. 若關閉了 AOF,加載 RDB 文件
  3. 加載 AOF/RDB 成功,redis 重啓成功
  4. AOF/RDB 存在錯誤,redis 啓動失敗並打印錯誤信息

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 最後

  一直想整理出一份完美的面試寶典,可是時間上一直騰不開,這套一千多道面試題寶典,結合今年金三銀四各類大廠面試題,以及 GitHub 上 star 數超 30K+ 的文檔整理出來的,我上傳之後,毫無心外的短短半個小時點贊量就達到了 13k,說實話仍是有點難以想象的。

一千道互聯網 Java 工程師面試題

內容涵蓋:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ、Kafka、Linux等技術棧(485頁)

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

《Java核心知識點合集(283頁)》

內容涵蓋:Java基礎、JVM、高併發、多線程、分佈式、設計模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、數據庫、雲計算等

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

《Java中高級核心知識點合集(524頁)》

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

《Java高級架構知識點整理》

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk= watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=

 因爲篇幅限制,詳解資料太全面,細節內容太多,因此只把部分知識點截圖出來粗略的介紹,每一個小節點裏面都有更細化的內容!

須要的小夥伴,能夠一鍵三連,點擊這裏獲取免費領取方式

相關文章
相關標籤/搜索