redis(12)持久化操作-RDB

来源:https://www.cnblogs.com/jiakecong/archive/2023/02/28/17164786.html
-Advertisement-
Play Games

前言 Redis 提供了 2 個不同形式的持久化方式: RDB(Redis DataBase) AOF(Append Of File) RDB 在指定的時間間隔內將記憶體中的數據集快照寫入磁碟, 也就是行話講的 Snapshot 快照,它恢復時是將快照文件直接讀到記憶體里。 備份是如何執行的 Redis ...


前言

Redis 提供了 2 個不同形式的持久化方式:

  • RDB(Redis DataBase)

  • AOF(Append Of File)
     

RDB

指定的時間間隔內將記憶體中的數據集快照寫入磁碟, 也就是行話講的 Snapshot 快照,它恢復時是將快照文件直接讀到記憶體里。
 

備份是如何執行的

Redis 會單獨創建(fork)一個子進程來進行持久化,首先會將數據寫入到一個臨時文件中,待持久化過程都結束了,再用這個臨時文件替換上次持久化好的文件。整個過程中,主進程是不進行任何 IO 操作的,這就確保了極高的性能。如果需要進行大規模數據的恢復,且對於數據恢復的完整性不是非常敏感,那 RDB 方式要比 AOF 方式更加的高效。RDB 的缺點是最後一次持久化後的數據可能丟失
 

Fork

  • Fork 的作用是複製一個與當前進程一樣的進程。新進程的所有數據(變數、環境變數、程式計數器等) 數值都和原進程一致,但是是一個全新的進程,並作為原進程的子進程。

  • 在 Linux 程式中,fork () 會產生一個和父進程完全相同的子進程,但子進程在此後多會 exec 系統調用,出於效率考慮,Linux 中引入了 “寫時複製技術”

  • 一般情況父進程和子進程會共用同一段物理記憶體,只有進程空間的各段的內容要發生變化時,才會將父進程的內容複製一份給子進程。
     

RDB 持久化流程

 

dump.rdb 文件

rdb的預設配置文件名稱為dump.rdb

rdb文件的保存路徑,預設為 Redis 啟動時命令行所在的目錄下 “dir ./”,也可以自己修改
 

如何觸發 RDB 快照-根據配置的策略

預設的配置策略如下圖:

舉例:save 60 10000,意思是在60s內生成了10000個key,那麼redis就會以rbd的方式持久化數據,會先將數據保存在臨時文件中,然後用臨時文件替換掉當前的dump.rdb
 

命令 save VS bgsave

上面的例子使用的是save保存方式,redis中更推薦bgsave保存方式

  • save :save 時只管保存,其它不管,全部阻塞。手動保存,不建議。

  • bgsave:Redis 會在後臺非同步進行快照操作, 快照同時還可以響應客戶端請求。

  • 可以通過 lastsave 命令獲取最後一次成功執行快照的時間。
     

rdb持久化的優勢

  • 適合大規模的數據恢復

  • 對數據完整性和一致性要求不高更適合使用

  • 節省磁碟空間

  • 恢復速度快

 

rdb持久化的劣勢

  • Fork 的時候,記憶體中的數據被克隆了一份,大致 2 倍的膨脹性需要考慮。

  • 雖然 Redis 在 fork 時使用了寫時拷貝技術,但是如果數據龐大時還是比較消耗性能。

  • 在備份周期在一定間隔時間做一次備份,所以如果 Redis 意外 down 掉的話,就會丟失最後一次快照後的所有修改。

 

總結


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 概述 代理模式就是給某一個對象提供一個代理,並由代理對象控制對原對象的引用。在一些情況下,一個客戶不想或者不能直接引用一個對象,而代理對象可以在客戶端和目標對象之間起到中介的作用。例如電腦桌面的快捷方式就是一個代理對象,快捷方式是它所引用的程式的一個代理。 代理模式一般又分為安全代理,虛擬代理 ,遠 ...
  • 1.系統是預設安裝的,查看系統是否安裝logrotate centos rpm -ql logrotate /etc/cron.daily/logrotate /etc/logrotate.conf /etc/logrotate.d /etc/rwtab.d/logrotate /usr/sbin/ ...
  • 1.IO的概念 IO簡單來講就是對輸入輸出設備的簡化表達形式 單片機中各種介面,進行數據流的傳輸 從磁碟中讀取數據至記憶體,又或者從記憶體中寫入磁碟 編程中的IO 此時的IO其應用程式的運行態,即進程 》IO調用 特別強調的是我們的應用程式其實並不存在實質的IO過程,真正的IO過程是操作系統的事情, 這 ...
  • 問題產生: 作者最近在搭建Hadoop+Hive集群時,將NameNode、DataNode、Rm全部部署到一臺物理機上,查詢量較大時連接掛掉。 問題定位: 使用JPS命令查看Metastore服務正常運行,hive2--Runjar掛掉。重啟之後,過段時間又會掛掉。 Linux 內核有個機制叫OO ...
  • 下載 官網下載地址:http://nginx.org/en/download.html Mainline version 開發版Stable version 穩定版Legacy versions 歷史版 滑鼠移動到你要選擇的版本超鏈接上點右鍵 複製鏈接地址 下載:wget http://nginx. ...
  • 編寫hello world腳本 #!/bin/bash # 編寫hello world腳本 echo "Hello World!" ##通過位置變數創建 Linux 系統賬戶及密碼 #!/bin/bash # 通過位置變數創建 Linux 系統賬戶及密碼 #$1 是執行腳本的第一個參數,$2 是執行 ...
  • 該引擎繼承於MergeTree,併在數據塊合併演算法中添加了摺疊行的邏輯。CollapsingMergeTree會非同步的刪除(摺疊)這些除了特定列Sign有1和-1的值以外,其餘所有欄位的值都相等的成對的行。沒有成對的行會被保留。因此,該引擎可以顯著的降低存儲量並提高SELECT查詢效率。 簡單來說就 ...
  • 轉載於:(140條消息) 如何管理oralce口令文件和參數文件_oracle 口令文件_夢想家DBA匠人的博客-CSDN博客口令文件審核 Step 1: 使用root賬號將 oracle dba的許可權移除 [root@oracle-db-19c ~]# su - oracle[oracle@ora ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...