[redis進階一]redis的持久化(2)AOF篇章

目錄

一 為什么有了RDB持久化機制還要有AOF呢

板書介紹具體原因:

?編輯二 詳細講解AOF機制

(1)AOF的基本使用

?1)板書如下

2)開啟AOF機制:

3) AOF工作流程

(2)AOF是否會影響到redis性能

?編輯

(3)AOF緩沖區刷新策略

(4)AOF的重寫機制

板書如下:

為什么要有這個重寫機制???

重寫流程 :

(5)混合持久化

板書如下

啟動時數據恢復

(6)對于信號的解釋

四? 本章重點回顧


一 為什么有了RDB持久化機制還要有AOF呢

原因:那肯定是RDB機制有無法滿足需求的場景,肯定是RDB有缺點,所以才又引入了AOF機制

板書介紹具體原因:

二 詳細講解AOF機制

(1)AOF的基本使用

AOF(AppendOnlyFile)持久化:以獨??志的?式記錄每次寫命令,重啟時再重新執?AOF ?件中的命令達到恢復數據的?的。AOF的主要作?是解決了數據持久化的實時性,?前已經是 Redis 持久化的主流?式。理解掌握好AOF持久化機制對我們兼顧數據安全性和性能?常有幫助。

?1)板書如下

2)開啟AOF機制:

開啟AOF功能需要設置配置:appendonlyyes,默認不開啟為no。AOF?件名通過 appendfilename 配置(默認是appendonly.aof)設置。保存?錄同RDB持久化?式?致,通過dir 配置指定。AOF的?作流程操作:命令寫?(append)、?件同步(sync)、?件重寫 (rewrite)、重啟加載(load),如圖所?。

步驟一通過root用戶使用vim打開以下文件:

ls /etc/redis/redis.conf

找到appendonly選項,默認為no

步驟二:修改 "appendonly"選項為yes并保存

3) AOF工作流程

  1. 所有的寫?命令會追加到aof_buf(緩沖區)中。
  2. AOF緩沖區根據對應的策略向硬盤做同步操作。
  3. 隨著硬盤AOF?件越來越?,需要定期對AOF?件進?重寫,達到壓縮的?的。
  4. 當Redis服務器啟動時,可以加載AOF?件進?數據恢復。

命令寫入:

AOF命令寫?的內容直接是?本協議格式。例如sethelloworld這條命令,在AOF緩沖區會追加如下 ?本:

*3\r\n$3\r\nset\r\n$5\r\nhello\r\n$5\r\nworld\r\n

此處遵守Redis格式協議,Redis選擇?本協議可能的原因:?本協議具備較好的兼容性;實現簡單; 具備可讀性。

AOF過程中為什么需要aof_buf這個緩沖區?Redis使?單線程響應命令,如果每次寫AOF?件都直 接同步硬盤,性能從內存的讀寫變成IO讀寫,必然會下降。先寫?緩沖區可以有效減少IO次數,同 時,Redis還可以提供多種緩沖區同步策略,讓??根據??的需求做出合理的平衡。?

(2)AOF是否會影響到redis性能

講解都在下邊板書中

(3)AOF緩沖區刷新策略

板書如下:

?件同步:

Redis 提供了多種AOF緩沖區同步?件策略,由參數appendfsync控制,不同值的含義如表所?。

系統調?write和fsync說明:

? write操作會觸發延遲寫(delayedwrite)機制。Linux在內核提供?緩沖區?來提供硬盤IO性 能。write操作在寫?系統緩沖區后?即返回。同步硬盤操作依賴于系統調度機制,例如:緩沖區 ?空間寫滿或達到特定時間周期。同步?件之前,如果此時系統故障宕機,緩沖區內數據將丟失。

? Fsync針對單個?件操作,做強制硬盤同步,fsync將阻塞直到數據寫?到硬盤。

? 配置為always時,每次寫?都要同步AOF?件,性能很差,在?般的SATA硬盤上,只能?持? 約?百TPS寫?。除?是?常重要的數據,否則不建議配置。

? 配置為no時,由于操作系統同步策略不可控,雖然提?了性能,但數據丟失?險?增,除?數據 重要程度很低,?般不建議配置。

? 配置為everysec,是默認配置,也是推薦配置,兼顧了數據安全性和性能。理論上最多丟失1秒的 數據。?

(4)AOF的重寫機制

板書如下:

總結重寫機制:就比如你要算你的利潤,這個月掙了6000雜七雜八花去2000,最后凈利潤4000,下個月在計算總利潤的時候直接從這4000開始算,第一個月中干活掙了100買水花20又寫文案掙了50買水果花60等等中間狀態直接舍去,只看最后的狀態

為什么要有這個重寫機制???

答案:隨著命令不斷寫?AOF,?件會越來越?,

為了解決這個問題,Redis引?AOF重寫機制壓縮?件體積。AOF?件重寫是把Redis進程內的數據轉化為寫命令同步到新的AOF?件。 重寫后的AOF為什么可以變??有如下原因:

  1. 進程內已超時的數據不再寫??件。
  2. 舊的AOF中的?效命令,例如del、hdel、srem等重寫后將會刪除,只需要保留數據的最終版本。
  3. 多條寫操作合并為?條,例如lpush list a、lpush list b、lpush list c可以合并為lpushlist a b c。

較?的AOF?件???降低了硬盤空間占?,???可以提升啟動Redis時數據恢復的速度。

AOF重寫過程可以?動觸發和?動觸發:

  • ?動觸發:調?bgrewriteaof命令。
  • ?動觸發:根據auto-aof-rewrite-min-size和auto-aof-rewrite-percentage參數確定?動觸發時 機。
    • auto-aof-rewrite-min-size:表?觸發重寫時AOF的最??件??,默認為64MB。
    • auto-aof-rewrite-percentage:代表當前AOF占???相?較上次重寫時增加的?例。

重寫流程 :

板書如下

1)執?AOF重寫請求。如果當前進程正在執?AOF重寫,請求不執?。如果當前進程正在執?bgsave操作,重寫命令 延遲到bgsave完成之后再執?。

2)?進程執?fork創建?進程。

3)重寫:

? ? ? ? a.主進程fork之后,繼續響應其他命令。所有修改操作寫?AOF緩沖區并根據appendfsync策 略同步到硬盤,保證舊AOF?件機制正確。

? ? ? ? b.?進程只有fork之前的所有內存信息,?進程中需要將fork之后這段時間的修改操作寫? AOF重寫緩沖區中。

4)?進程根據內存快照,將命令合并到新的AOF?件中。

5)?進程完成重寫

? ? ? ? a.新?件寫?后,?進程發送信號給?進程。

? ? ? ? b.?進程把AOF重寫緩沖區內臨時保存的命令追加到新AOF?件中。

? ? ? ? c.?新AOF?件替換?AOF?件。

(5)混合持久化

板書如下

啟動時數據恢復

當Redis啟動時,會根據RDB和AOF?件的內容,進?數據恢復,如圖所?。

?

(6)對于信號的解釋

直接看板書講解:

四? 本章重點回顧

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76678.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76678.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/76678.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

前端防御性編程

關于防御性編程 你是否遇到過,接口請求失敗或者返回數據錯誤,導致系統白屏或者前端自身寫的代碼存在一些缺陷,導致整個系統不夠健壯,從而導致系統白屏 常見的問題與防范 最常見的問題 訪問了null或者undefined的屬性 null.a …

[數據結構]排序 --2

目錄 8、快速排序 8.1、Hoare版 8.2、挖坑法 8.3、前后指針法 9、快速排序優化 9.1、三數取中法 9.2、采用插入排序 10、快速排序非遞歸 11、歸并排序 12、歸并排序非遞歸 13、排序類算法總結 14、計數排序 15、其他排序 15.1、基數排序 15.2、桶排序 8、快速排…

虎躍辦公AI:重構智能辦公的「模型交響樂團」

虎躍辦公AI:重構智能辦公的「模型交響樂團」 ——當全球40大模型在辦公場景中奏響協奏曲 在某科創園區的會議室里,市場總監李薇正用AI生成產品發布會方案,設計團隊同步調校著AI渲染的3D主視覺,法務AI自動掃描著合同風險條款——這…

JdbcTemplate基本使用

JdbcTemplate概述 它是spring框架中提供的一個對象,是對原始繁瑣的JdbcAPI對象的簡單封裝。spring框架為我們提供了很多的操作模板類。例如:操作關系型數據的JdbcTemplate和MbernateTemplate,操作nosql數據庫的RedisTemplate,操作消息隊列的…

vue+leaflet 區域劃分_反向遮罩層

leaflet 區域劃分_遮罩層 geojson在線生成器網址:(https://datav.aliyun.com/portal/school/atlas/area_selector) 點擊前往阿里云geojson生成器 效果圖: 實現下面效果,只需要把addSateLayer函數的調用取消掉就好了. //添加遮罩層代碼function addMask() {var latlngs;var fe…

ESP32開發之ubuntu環境搭建

1. 在Ubuntu官網下載Ubuntu server 20.04版本https://releases.ubuntu.com/20.04.6/ 2. 在vmware下安裝Ubuntu 3. 改Ubuntu靜態IP $ sudo vi /etc/netplan/00-installer-config.yaml# This is the network config written by ‘subiquity’ network: renderer: networkd eth…

HTTP 1.1 比 HTTP1.0 多了什么?(詳盡版)

相較于HTTP 1.0,1.1 版本增加了以上特性: 1. 新增了連接管理即 keepalive,允許持久連接。 定義: Keepalive允許客戶端和服務器在完成一次請求-響應后,保持連接處于打開狀態,以便后續請求復用同一連接&am…

【深度學習】PyTorch實現VGG16模型及網絡層數學原理

一、Demo概述 代碼已附在文末 1.1 代碼功能 ? 實現VGG16網絡結構? 在CIFAR10數據集上訓練分類模型 1.2 環境配置 詳見【深度學習】Windows系統Anaconda CUDA cuDNN Pytorch環境配置 二、各網絡層概念 2.1 卷積層(nn.Conv2d) nn.Conv2d(in_cha…

解決RecyclerView在調用smoothScrollToPosition后最后一個item底部超出屏幕的問題

要解決RecyclerView在調用smoothScrollToPosition后最后一個item底部超出屏幕的問題,可以使用自定義的LinearSmoothScroller,使其底部對齊屏幕。步驟如下: 創建自定義的SmoothScroller類: 繼承LinearSmoothScroller并重寫getVerti…

k8s親和力和非親和力

在 Kubernetes 中,親和力(Affinity)和非親和力(Anti-Affinity)是用于控制 Pod 調度策略的機制,它們可以幫助優化資源利用率、提高應用性能和可用性。以下是親和力和非親和力的詳細解釋: 親和力…

開發一款游戲需要哪些崗位角色參與?

常見分類 1. 游戲策劃(Game Designer) 核心職責:設計游戲的玩法、規則、內容和整體體驗。 具體工作: 系統設計:設計游戲的戰斗、經濟、成長、社交等核心系統。 數值設計:平衡角色屬性、裝備數值、經濟系…

Asp.NET Core WebApi 創建帶鑒權機制的Api

構建一個包含 JWT(JSON Web Token)鑒權的 Web API 是一種常見的做法,用于保護 API 端點并驗證用戶身份。以下是一個基于 ASP.NET Core 的完整示例,展示如何實現 JWT 鑒權。 1. 創建 ASP.NET Core Web API 項目 使用 .NET CLI 或 …

Jenkins 發送釘釘消息

這里不介紹 Jenkins 的安裝,可以網上找到很多安裝教程,重點介紹如何集成釘釘消息。 需要提前準備釘釘機器人的 webhook 地址。(網上找下,很多教程) 下面開始配置釘釘機器人,登錄 Jenkins,下載 …

CentOS中離線安裝DockerCompos并用其部署Rabbitmq(使用離線導入導出docker鏡像方式)

場景 DockerDockerCompose實現部署jenkins,并實現jenkinsfile打包SpringBootVue流水線項目過程詳解、踩坑記錄(附鏡像資源、離線包資源下載): DockerDockerCompose實現部署jenkins,并實現jenkinsfile打包SpringBootVue流水線項目過程詳解、踩坑記錄(附鏡像資源、離…

stm32week11

stm32學習 八.stm32基礎 2.stm32內核和芯片 F1系統架構:4個主動單元和4個被動單元 AHB是內核高性能總線,APB是外圍總線 總線矩陣將總線和各個主動被動單元連到一起 ICode總線直接連接Flash接口,不需要經過總線矩陣 AHB:72MHz&am…

貪心算法:部分背包問題深度解析

簡介: 該Java代碼基于貪心算法實現了分數背包問題的求解,核心通過單位價值降序排序和分階段裝入策略實現最優解。首先對Product數組執行雙重循環冒泡排序,按wm(價值/重量比)從高到低重新排列物品;隨后分兩階段裝入:循環…

13. Langchain異步處理:提升應用性能的關鍵技巧

引言:從"順序等待"到"并行加速" 2025年某電商平臺引入LangChain異步處理后,大促期間訂單處理能力提升5倍,系統響應延遲降低70%。本文將基于LangChain的異步架構,詳解如何通過并行執行流式處理,讓…

ros2-rviz2控制unity仿真的6關節機械臂,探索從仿真到實際應用的過程

文章目錄 前言(Introduction)搭建開發環境(Setup Development Environment)在window中安裝Unity(Install Unity in window)創建Docker容器,并安裝相關軟件(Create Docker containers…

計算機組成原理筆記(十四)——3.4指令類型

一臺計算機的指令系統可以有上百條指令,這些指令按其功能可以分成幾種類型,下面分別介紹。 3.4.1數據傳送類指令 一、核心概念與功能定位 數據傳送類指令是計算機指令系統中最基礎的指令類型,負責在 寄存器、主存、I/O設備 之間高效復制數…

各開源協議一覽

在 GitHub 上,開源項目通常會使用一些常見的開源協議來定義項目的使用、修改和分發規則。以下是目前 GitHub 上最常見的幾種開源協議及其差異和示例說明: TL;DR 協議寬松程度是否強制開源專利保護適用場景MIT最寬松否無希望代碼被廣泛使用Apache 2.0寬松…