日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

redis持久化到mysql的方案_redis进阶: 数据持久化

發布時間:2023/12/4 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis持久化到mysql的方案_redis进阶: 数据持久化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

redis是內存數據庫,即數據庫狀態都是存儲于內存中,因此,當服務器重啟或者斷開后,數據便會丟失;為了解決數據丟失問題,便需要將數據從內存保持到磁盤中,這就是redis的數據持久化

目前,redis實現了兩種數據庫持久化方案,一種是RDB,另一種是AOF,讓我們來聊聊這兩種方案

RDB

redis database,即將數據庫的內容(key-value)保存為壓縮的二進制文件

即便redis服務進程退出,但是RDB文件仍然存在,這樣當redis啟動時便會自動載入RDB文件以此保證數據不丟失,其流程如下

![rdb流程](http://image.fidding.me/20200601162845.png )

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进阶: 数据持久化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。