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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redis(10)--RDB持久化

發布時間:2024/4/13 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis(10)--RDB持久化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

保存

命令

保存命令沖突性

載入

自動間隔性保存

數據結構

dirty計數器與lastsave

檢查保存條件是否滿足

RDB 文件結構

組成部分

DB-DATA部分

KEY-VALUE-PAIRS

RDB分析工具


在運行情況下, Redis 以數據結構的形式將數據維持在內存中, 為了讓這些數據在 Redis 重啟之后仍然可用, Redis 分別提供了 RDB 和 AOF 兩種持久化模式。

在 Redis 運行時, RDB 程序將當前內存中的數據庫快照保存到磁盤文件中, 在 Redis 重啟動時, RDB 程序可以通過載入 RDB 文件來還原數據庫的狀態。

?

RDB 功能最核心的是 rdbSave 和 rdbLoad 兩個函數, 前者用于生成 RDB 文件到磁盤, 而后者則用于將 RDB 文件中的數據重新載入到內存中:

保存

命令

  • SAVE

阻塞主進程,服務器不處理任何客戶端請求。

  • BGSAVE

子進程處理,不阻塞主進程。

如果 RDB 文件已存在, 那么新的 RDB 文件將替換已有的 RDB 文件。

保存命令沖突性

  • SAVE,BGSAVE互相沖突,并且BGSAVE之間也沖突。
  • BGSAVE,BGREWRITEAOF 互相沖突。(操作方面沒有什么沖突,主要是考慮性能)

載入

REDIS服務器啟動時載入

載入期間, 服務器每載入 1000 個鍵就處理一次所有已到達的請求, 不過只有 PUBLISH 、 SUBSCRIBE 、 PSUBSCRIBE 、 UNSUBSCRIBE 、 PUNSUBSCRIBE 五個命令的請求會被正確地處理, 其他命令一律返回錯誤

發布與訂閱功能和其他數據庫功能是完全隔離的,前者不寫入也不讀取數據庫,所以在服務器載入期間,訂閱與發布功能仍然可以正常使用,而不必擔心對載入數據的完整性產生影響

如果服務器在啟動時, 打開了 AOF 功能, 那么程序優先使用 AOF 文件來還原數據。 只有在 AOF 功能未打開的情況下, Redis 才會使用 RDB 文件來還原數據。

自動間隔性保存

因為BGSAVE命令在后臺執行,Redis允許用戶配置服務器save選項,讓服務器每隔一段時間自動執行一次BGSAVE命令。

save 900 1? #900秒內進行了一次修改

save 300 10 #300秒內進行了10次修改

save 60 10000? #60秒內進行了10000次修改

只要滿足了任意一個配置BGSAVE就會被觸發。

數據結構

struct redisServer {//保存多個save配置的數組。struct saveparam * saveparams;//修改計數器long dirty;//上次保存時間time_t lastsave; }struct saveparam {//間隔秒數time_t seconds;//修改數int changes; }

?

dirty計數器與lastsave

除了saveparams數組外,服務器狀態還維持了一個dirty計數器與lastsave屬性。

dirty計數器記錄從上次保存之后,服務器的修改次數。

lastsave,UNIX時間戳,記錄上次保存命令的時間。

檢查保存條件是否滿足

serverCron默認每隔100毫秒就會執行一次。其中一項工作,檢查save參數,確認是否執行BGSAVE命令。

RDB 文件結構

組成部分

+-------+-------------+-----------+-----------------+-----+-----------+ | REDIS | RDB-VERSION | SELECT-DB | KEY-VALUE-PAIRS | EOF | CHECK-SUM | +-------+-------------+-----------+-----------------+-----+-----------+|<-------- DB-DATA ---------->|
  • REDIS:文件標識符,固定5個字符:REDIS。
  • RDB-VERSION:Rredis版本,4字節,不同版本不兼容
  • DB-DATA:每個非空數據庫的數據
  • EOF:數據庫內容的結尾。
  • CHECH-SUM:所有文件內容校驗和,0表示關閉校驗。

DB-DATA部分

SELECT-DB:數據庫編號。

KEY-VALUE-PAIRS:數據庫鍵值對。

KEY-VALUE-PAIRS

+----------------------+---------------+-----+-------+ | OPTIONAL-EXPIRE-TIME | TYPE-OF-VALUE | KEY | VALUE | +----------------------+---------------+-----+-------+
  • OPTIONAL-EXPIRE-TIME

過期時間。未設置過期時間,則不出現。設置過期時間的格式:EXPIRETIME_MS | ms 。EXPIRETIME_MS 1字節常量,表示以毫秒表示過期時間。ms:過期時間,單位毫秒。

  • TYPE-OF-VALUE:鍵值類型,實際存儲類型。1字節。
  • KEY:編碼方式與REDIS_RDB_TYPE_STRING類型的value一樣。
  • VALUE:類型不同,編碼不同。

RDB分析工具

Redis本身帶有RDB文件檢查工具redis-check-dump。

?

?

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的redis(10)--RDB持久化的全部內容,希望文章能夠幫你解決所遇到的問題。

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