5分鐘徹底理解Redis持久化

来源:https://www.cnblogs.com/xiaoqiang-code/archive/2019/10/27/11748395.html
-Advertisement-
Play Games

Redis持久化 RDB快照 在預設情況下,Redis將記憶體資料庫快照保存到dump.rdb的二進位文件中。 可以對Redis進行設置,讓它在“N秒內數據集至少有N個改動”, 這一條件被滿足時,自動保存一次數據集。比如說:讓Redis滿足“60秒內至少有1000個鍵被改動”這一個條件時,自動保存一次 ...


Redis持久化

RDB快照

在預設情況下,Redis將記憶體資料庫快照保存到dump.rdb的二進位文件中。
可以對Redis進行設置,讓它在“N秒內數據集至少有N個改動”, 這一條件被滿足時,自動保存一次數據集。比如說:讓Redis滿足“60秒內至少有1000個鍵被改動”這一個條件時,自動保存一次數據集。

save 60 1000

除了在配置文件中使用save關鍵字設置RDB快照,還可以在命令行中手動執行命令生成RDB快照,進入redis客戶端執行命令save或bgsave可以生成dump.rdb文件。
每次執行命令都會將所有redis記憶體快照保存到一個rdb文件里,並覆蓋原有的rdb快照文件。
save是同步命令,bgsave是非同步命令,bgsave會從redis主進程fork出一個子進程專門用來生成rdb二進位文件。

AOF(append only file)

快照功能並不是非常durable,如果redis因為某些原因而造成故障停機,那麼伺服器將丟失最近寫入且未保存到快照中的那些數據。從1.1版本,redis增加了一種完全durable的方式:AOF持久化,將修改的每一條指令記錄進appendonly.aof中。修改配置文件來打開aof功能:

appendonly yes

打開aof功能,每當redis執行一個改變數據集的命令時,這個命令就會追加到aof文件的末尾。這樣的話,當redis重新啟動時,程式就會通過執行aof文件中的命令來達到重建數據集的目的。
可以配置redis多久才將命令持久化到磁碟一次。

appendfsync always:每次有新命令追加到aof文件時就執行一個持久化,非常慢但是安全
appendfsync everysec:每秒執行一次持久化,足夠快(和使用rdb持久化差不多)並且在故障時只會丟失1秒鐘的數據
appendfsync no:從不持久化,將數據交給操作系統來處理。redis處理命令速度加快但是不安全。

預設情況下 ,每秒執行一次fsync, 這種fsync策略可以兼顧安全性和速度。
rdb和aof的區別:

redis啟動時如果既有rdb文件又有aof文件則優先選擇aof文件恢複數據,因為aof文件一般來說數據更安全一點。

二、AOF重寫
aof文件里可能有太多“瑣碎”指令,所以aof會定期根據記憶體的最新數據重新生成aof文件
有兩個配置可以控制aof自動重寫的頻率:

auto-aof-rewrite-min-size 64mb: aof文件至少要達到64m才會觸發制動重寫,文件太小恢復速度本來就很快,重寫的意義不大

auto-aof-rewrite-percentage 100:aof文件上一次重寫後文件大小增長了100%則再次觸發重寫

當然aof還可以手動重寫,進入redis客戶端執行命令bgrewriteaof重寫aof。
觸發aof重寫時,redis會fork一個子進程去做,不會對redis正常命令處理有太多影響。

Redis 4.0混合持久化

重啟redis恢複數據集時,很少會使用rdb來恢復記憶體狀態,因為會丟失大量數據。通常會使用aof日誌恢複數據,但是重放aof日誌性能相對rdb來說要慢很多,這樣在redis實例很大的情況下,啟動需要花費很長時間。Redis4.0為瞭解決這個問題,帶來了新的持久化選項——混合持久化。

aof-use-rdb-preamble yes

混合持久化aof文件結構:

如果開啟了混合持久化,aof在重寫時,不再是單純將記憶體數據轉換為RESP命令寫入aof文件,而是將重寫這一刻之前的記憶體做rdb快照處理,並且將rdb快照內容和增量的aof修改記憶體數據的命令存在一起,都寫入新的aof文件,新的aof文件一開始不叫appendonly.aof,等到重寫完成後,新的aof文件才會進行改名,原子的覆蓋原有的aof文件,完成新舊兩個aof文件的替換。
於是在redis重啟的時候,可以先載入rdb文件,然後再重放增量的aof日誌就可以完全替代之前的aof全量文件重放,因此重啟效率大幅得到提高。

還沒關註我的公眾號?

  • 掃文末二維碼關註公眾號【小強的進階之路】可領取如下:
  • 學習資料: 1T視頻教程:涵蓋Javaweb前後端教學視頻、機器學習/人工智慧教學視頻、Linux系統教程視頻、雅思考試視頻教程;
  • 100多本書:包含C/C++、Java、Python三門編程語言的經典必看圖書、LeetCode題解大全;
  • 軟體工具:幾乎包括你在編程道路上的可能會用到的大部分軟體;
  • 項目源碼:20個JavaWeb項目源碼。
    小強的進階之路二維碼

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

-Advertisement-
Play Games
更多相關文章
  • 關於WSL的,Win10 的Linux子系統如何安裝,就不贅述了,Win10商店裡就有,至於win7和win8.1想裝這個估計也不行,所以跳過。 最近處於好奇,也懶得弄VMware的虛擬機(那玩意兒占記憶體太多了),就整了個來玩下,興奮之餘也測試了一些命令行分屏工具,後來決定下來用byobu。 一、直 ...
  • 磁碟存儲 liunx 存儲方式 一切皆文件 設備類型: 1. 塊設備: block liunx 表現為b開頭文件,可以隨機讀寫,存在緩存,存取單位是“塊”如:磁碟 2. 字元設備: char 不存在緩存,存取單位是“字元”,如:鍵盤 設備文件: 關聯至一個設備驅動程式,進而能夠跟與之對應硬體設備進行 ...
  • [TOC] 1. 埠號 在同一臺主機或設備上,可能有多個進程同時在使用TCP或UDP協議,埠號的作用就是區分這些不同的進程,即每個進程使用各自不同的埠號。 對於TCP協議和UDP協議,埠號都是用unsigned short類型表示,即埠號的範圍為0 65535,這65536個埠號被分為3 ...
  • 一.centos的安裝 centos分為桌面版本和命令版本;在這裡我使用的是命令版本,因為這個版本比較小,推薦使用電腦配置不高的使用centos命令版本。 這裡選擇安裝程式光碟映像文件,文件就是centos7的iso文件。 虛擬機的名稱和位置自行設置; 虛擬機的記憶體根據自己電腦的配置設置,我這裡設置 ...
  • Linux操作系統 linux系統的主要構成: 1、硬體交互層:系統的底層,為內核層提供基礎,由管理外圍設備的軟體構成(外設包括終端控制器和存儲設備控制器) 2、內核層:系統核心,包括進程管理和文件子系統 3、系統介面層:實現操作系統命令,視窗系統和系統函數的調用功能,為應用層提供命令介面,圖形介面 ...
  • Linux常用命令 Linux常用的目錄操作命令 pwd 命令查看用戶的當前目錄 cd 改變當前路徑 cd 絕對路徑或者相對路徑 cd ~ 切換到當前用戶的宿主目錄 cd - 切換到上一次所在的目錄 cd .. 上一級目錄 ls 命令顯示文件或目錄信息 mkdir 創建目錄 -p 創建嵌套的多級目錄 ...
  • 一、單端、全差分、偽差分 此部分轉載https://www.cnblogs.com/alifpga/p/7976531.html 單端信號: 單端信號(single-end)是相對於差分信號而言的,單端輸入指信號有一個參考端和一個信號端構成,參考端一般為地端。 差分信號: 差分(Differenti ...
  • COUNT全表記錄 在MySQL中,相同的SQL不同的存儲引擎執行計劃不同: 現有測試表TB101: 對於沒有WHERE條件的COUNT(*)/COUNT(1)/COUNT(ID)/COUNT(C1)的執行計劃為: 對於沒有WHERE條件的COUNT(C2)的執行計劃為: 可以發現,對於MyISAM ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...