redis持久化到mysql的方案_redis进阶: 数据持久化
redis是內存數據庫,即數據庫狀態都是存儲于內存中,因此,當服務器重啟或者斷開后,數據便會丟失;為了解決數據丟失問題,便需要將數據從內存保持到磁盤中,這就是redis的數據持久化
目前,redis實現了兩種數據庫持久化方案,一種是RDB,另一種是AOF,讓我們來聊聊這兩種方案
RDB
redis database,即將數據庫的內容(key-value)保存為壓縮的二進制文件
即便redis服務進程退出,但是RDB文件仍然存在,這樣當redis啟動時便會自動載入RDB文件以此保證數據不丟失,其流程如下

1.手動生成RDB文件
redis有兩個命令用于生成RDB文件,即SAVE與BGSAVE,這兩個指令的用途都是一樣的,唯一的區別在于
SAVE會直接堵塞服務器進程,知道RDB文件創建完畢為止,這會導致在此期間服務器不能處理任何命令請求
BGSAVE不會堵塞服務器進程,而是會fork派生出一個子進程用于執行RDB創建,在此期間服務器主進程(父進程)仍可以繼續處理命令請求
其實現源碼位于rdb.c中的rdbSave()與rdbSaveBackground()函數,有興趣的小伙伴可以去看看
從區別來看,很明顯,在執行RDB文件的創建首選指令BGSAVE
2.自動生成RDB文件
一般來說RDB文件的生成并不需要用戶去手動執行,redis提供了save指令允許用戶設置執行條件:在多少時間內服務器進行多少次修改;例如指令save 500 1即表示服務器如果滿足在500秒之內對數據庫執行了至少1次修改,那么就會執行RDB文件的生成
在redis的serverCron()時間事件中會去判斷是否滿足條件并執行RDB文件生成
3.自動加載RDB
RDB文件的生成可以手動執行,但是redis目前并沒有提供手動加載RDB文件的操作指令,即RDB文件的載入工作是在服務器啟動的時候自動執行的,并且在服務器載入RDB文件期間會一直處于堵塞狀態
AOF
Append Only File,通過將redis服務器所執行的寫指令保存為AOF文件來記錄數據庫狀態
1.何時寫入
當用戶執行redis寫操作時,便會將指令保存到AOF文件中,其流程如下
2.關于AOF重寫
問題:隨著數據庫服務器運行,AOF文件中的內容會越來越多,因為每一條寫指令都需要記錄,也因此執行AOF文件來進行數據還原的時間也就越久
解決方案:為了解決這個問題,redis提供了AOF重寫BGREWRITEAOF指令;原理即從數據庫中讀取鍵現在的值,然后用一條指令去記錄鍵值對,代替之前的多余命令,并重新生成一套寫指令存儲為新的AOF文件,并替換掉舊的AOF文件,這樣新AOF文件就不會存在過多的冗余指令,體積包括執行時間也會小很多
3.何時加載AOF
當服務器重啟動時會先檢測是否有AOF文件,如果有就會載入AOF文件來實現數據一致,如果沒有AOF則會檢測是否執行RDB載入流程
加載
當服務器啟動時會先檢測是否有AOF文件,如果有則加載AOF文件,如果沒有則會判斷是否有RDB文件存在,如果有RDB文件,則加載RDB文件
相關文檔:
總結
以上是生活随笔為你收集整理的redis持久化到mysql的方案_redis进阶: 数据持久化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 松树果子的功效与作用、禁忌和食用方法
- 下一篇: 燕窝雪梨的功效与作用、禁忌和食用方法