Redis7--基礎篇3(持久化)

持久化介紹

在這里插入圖片描述
官網地址:
https://redis.io/docs/manual/persistence

  • RDB(Redis DataBase)
  • AOF(Append Only File)
  • RDB + AOF
    在這里插入圖片描述

RDB模式(Redis DataBase)

在這里插入圖片描述
RDB 持久性以指定的時間間隔執行數據集的時間點快照。
實現類似照片記錄效果的方式,就是把某一時刻的數據和狀態以文件的形式寫到磁盤上,也就是
快照。這樣一來即使故障宕機,快照文件也不會丟失,數據的可靠性也就得到了保證。
這個快照文件就稱為RDB文件(dump.rdb),其中,RDB就是Redis DataBase的縮寫。

在指定的時間間隔內將內存中的數據集快照寫入磁盤也就是行話講的Snapshot內存快照,它恢復時再將硬盤快照文件直接讀回到內存里。

redis.conf配置文件

  • 6.0.16版本以下
    在這里插入圖片描述
    在這里插入圖片描述

  • 6.2以及7.0版本
    在這里插入圖片描述

開啟備份

1.修改配置文件

在這里插入圖片描述
5秒或2次

2. 定義dump文件保存路徑

在這里插入圖片描述

3. 定義dump文件名稱

在這里插入圖片描述

測試

在這里插入圖片描述
在這里插入圖片描述

恢復備份

1. 將備份文件移動到redis安裝目錄并啟動服務

flushall、flushdb命令也會產生備份文件
物理恢復,服務、備份需要分機隔離,防止硬盤損壞后備份文件也丟失。

手動觸發備份

redis提供了兩個命令來生成RDB文件, savebgsave
在這里插入圖片描述

save

會阻塞當前redis服務器,知道持久化工作完成,在執行save命令期間,redis不能處理其他命令,生產禁止使用

在這里插入圖片描述

bgsave

在這里插入圖片描述

redis會在后臺異步進行快照操作,不阻塞,在進行快照同時還能響應客戶端請求,該觸發方式會fork一個子進程,由子進程復制持久化過程。
Redis會使用bgsave對當前內存中的所有數據做快照,這個操作是子進程在后臺完成的,這就允許主進程同時可以修改數據。

在這里插入圖片描述

劣勢

在這里插入圖片描述

在備份間隔期間redis意外down調的話,會丟失當前至最新一次快照的數據。
內存數據全量同步,如果數據量太大會造成占用大量I/O,影響服務器性能。
RDB依賴于主進程的fork,在更大的數據集中,這可能導致服務的請求的瞬間延遲,fork的時候內存中的數據被克隆了一份,需要考慮容量。

如何檢修dump.rdb文件

在這里插入圖片描述

觸發RDB快照的情況

  • 配置文件中默認的快照配置
  • 執行save、bgsave命令
  • 執行flushdb、flushall命令,但是生成的dump.rdb文件是空的,沒有意義。
  • 屬性shutdown并且沒有設置開啟AOF持久化
  • 主從復制,主節點自動觸發

禁用快照

  • 啟動服務時輸入相關參數

    redis -cli config set save ""
    
  • 修改配置文件
    在這里插入圖片描述

RDB模式相關配置參數詳解

  • save <seconds> <changes> 快照的頻率

  • dbfilename 快照文件的名稱

  • dir 快照文件的目錄

  • stop-writes-on-bgsave-error
    默認yes
    如果配置成no,表示你不在乎數據不一致或者有其他的手段發現和控制這種不一致,那么在快照寫入失敗時,
    也能確保redis繼續接受新的寫請求
    在這里插入圖片描述

  • rdbcompression
    在這里插入圖片描述
    默認yes
    對于存儲到磁盤中的快照,可以設置是否進行壓縮存儲。如果是的話,redis會采用LZF算法進行壓縮。
    如果你不想消耗CPU來進行壓縮的話,可以設置為關閉此功能

  • rdbchecksum
    在這里插入圖片描述
    默認yes
    在存儲快照后,還可以讓redis使用CRC64算法來進行數據校驗,但是這樣做會增加大約10%的性能消耗,如果希望獲取到最大的性能提升,可以關閉此功能

  • rdb-del-sync-files
    在這里插入圖片描述
    在沒有持久性的情況下刪除復制中使用的RDB文件啟用。默認情況下no,此選項是禁用的。

小總結

在這里插入圖片描述


AOF模式(Append Only File)

介紹

以日志的形式來記錄每個寫操作,將Redis執行過的所有寫指令記錄下來(讀操作不記錄),只許追加文件但不可以改寫文件,redis啟動之初會讀取該文件重新構建數據,換言之,redis重啟的話就根據日志文件的內容將寫指令從前到后執行一次以完成數據的恢復工作。
默認情況下,redis是沒有開啟AOF的,如果開啟的話需要修改配置文件。

配置AOF開啟、AOF備份文件路徑、AOF備份文件名

AOF持久化工作流程
在這里插入圖片描述

1-Client作為命令的來源,會有多個源頭以及源源不斷的請求命令。
2-在這些命令到達Redis Server 以后并不是直接寫入AOF文件,會將其這些命令先放入AOF緩存中進行保存。這里的AOF緩沖區實際上是內存中的一片區域,存在的目的是當這些命令達到一定量以后再寫入磁盤,避免頻繁的磁盤IO操作。
3-AOF緩沖會根據AOF緩沖區同步文件的三種寫回策略將命令寫入磁盤上的AOF文件。
4-隨著寫入AOF內容的增加為避免文件膨脹,會根據規則進行命令的合并(又稱AOF重寫),從而起到AOF文件壓縮的目的。
5-當Redis Server 服務器重啟的時候會從AOF文件載入數據。

AOF緩沖區三種寫回策略

在這里插入圖片描述

  • always
    同步寫回,每個寫命令執行完立刻同步的將日志寫回磁盤
  • everysec
    每秒寫回,每個寫命令執行完,只是先把日志寫到AOF文件內存緩沖區,每隔一秒把緩沖區的內容寫入磁盤
  • no
    操作系統控制的寫回,每個寫命令執行完,只是先把日志寫到AOF文件

在這里插入圖片描述

AOF文件路徑

redis6

AOF文件與RDB文件的位置一樣,在此配置
在這里插入圖片描述

redis7

在這里插入圖片描述
在這里插入圖片描述
最終保存路徑為 dir+appenddirname

AOF文件名稱

redis6

有且只有一個

在這里插入圖片描述

redis7

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

恢復

正常恢復

  • 配置文件中 appendonly no 改為 appendonly yes
  • 重啟服務

異常恢復

  • 重啟服務會進入AOF文件的載入,如果AOF文件有問題,則無法啟動
  • 異常修復命令:redis -check -aof --fix

優勢

可緊急恢復、性能高、數據更不易丟失

劣勢

對于相同的數據集來說,AOF文件要遠大于RDB文件,恢復速度慢于RDB
AOF運行效率要慢于RDB,每秒同步策略較好

AOF重寫機制

介紹

由于AOF持久化是Redis不斷將寫命令記錄到 AOF 文件中,隨著Redis不斷的進行,AOF 的文件會越來越大,文件越大,占用服務器內存越大以及 AOF 恢復要求時間越長。為了解決這個問題,Redis新增了重寫機制,當AOF文件的大小超過所設定的峰值時,Redis就會自動啟動AOF文件的內容壓縮,只保留可以恢復數據的最小指令集,或者可以手動使用命令 bgrewriteaof 來重新。

觸發機制

在這里插入圖片描述
注意 ,同時滿足,且的關系才會觸發。
1 根據上次重寫后的aof大小,判斷當前aof大小是不是增長了1倍
2 重寫時滿足的文件大小
3 滿足配置文件中的配置項后,Redis會記錄上次重寫的AOF文件大小,默認配置是當AOF文件大小是上次write后大小的一倍且文件大于64MB時
4 可以執行bgrewriteof命令

總結

AOF文件重寫并不是對原文件進行重新整理,而是直接讀取服務器現有的鍵值對,然后用一條命令去代替之前記錄這個鍵值對的多條命令,生成一個新的文件后去替換原來的AOF文件。

原理

1:在重寫開始前,redis會創建一個“重寫子進程”,這個子進程會讀取現有的AOF文件,并將其包含的指令進行分析壓縮并寫入到一個臨時文件中。
2:與此同時,主進程會將新接收到的寫指令一邊累積到內存緩沖區中,一邊繼續寫入到原有的AOF文件中,這樣做是保證原有的AOF文件的可用性,避免在重寫過程中出現意外。
3:當“重寫子進程”完成重寫工作后,它會給父進程發一個信號,父進程收到信號后就會將內存中緩存的寫指令追加到新AOF文件中
4:當追加結束后,redis就會用新AOF文件來代替舊AOF文件,之后再有新的寫指令,就都會追加到新的AOF文件中
5:重寫aof文件的操作,并沒有讀取舊的aof文件,而是將整個內存中的數據庫內容用命令的方式重寫了一個新的aof文件,這點和快照有點類似

配置項詳細說明

在這里插入圖片描述

小總結

在這里插入圖片描述


RDB-AOF混合持久化模式

在同時開啟RDB和AOF持久化時,重啟只會加載AOF文件,不會加載RDB文件。
在這里插入圖片描述

RDB+AOF混合方式
結合了RDB和AOF的優點,既能快速加載又能避免丟失過多的數據

開啟混合方式設置

設置aof-use-rdb-preamble的值為 yes yes表示開啟,設置為no表示禁用

先使用RDB進行快照存儲,然后使用AOF持久化記錄所有的寫操作,當重寫策略滿足或手動觸發重寫的時候,將最新的數據存儲為新的RDB記錄。這樣的話,重啟服務的時候會從RDB和AOF兩部分恢復數據,既保證了數據完整性,又提高了恢復數據的性能。簡單來說:混合持久化方式產生的文件一部分是RDB格式,一部分是AOF格式。----》AOF包括了RDB頭部+AOF混寫
在這里插入圖片描述


純緩存模式

同時關閉RDB模式和AOF模式,但仍可以使用save、bgsave命令來生成rdb文件,用bgrewriteaof命令來生成aof文件。

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

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

相關文章

計算機組成原理(萬字爆肝整理)

第一章 計算機系統概述 “較簡單&#xff0c;不做過多贅述&#xff0c;后面會詳細學到” 第一節 計算機系統層次結構 1.計算機系統的基本組成&#xff1a;硬件軟件 2.計算機硬件的基本組成&#xff1a;運算器存儲器控制器輸入設備輸出設備 3.系統軟件和應用軟件 系統軟件…

expdp導出分區表緩慢排查(Streams AQ: waiting for messages in the queue )

基本信息 單機&#xff0c;從老環境遷移到19.19。之前的導出速度接受范圍內。硬件是提升的 導出使用了壓縮&#xff0c;加密&#xff0c;并行64進程&#xff0c;表分區約90個&#xff0c;無lob字段。 現象 導出開始時能并行導出&#xff08;并行約45個&#xff0c;沒起到64…

Cypress環境變量

Cypress環境變量 baseUrl 當你配置了 baseUrl &#xff0c;測試套件中的 cy.visit() 、 cy.request() 都會自動以 baseUrl 的值作為前綴并且&#xff0c;當你需要訪問某些網址或者發起接口請求時&#xff0c;在代碼中就可以不用再指定請求的 host 或者 url 了 如何配置 base…

Java進階——多線程相關,實際應用中的積累,持續更新

目錄 多線程相關CountDownLatch賽跑的案例countDownLatch.await(300, TimeUnit.SECONDS); Java其他進階Map的put方法只放一個元素的集合 多線程相關 CountDownLatch 案例&#xff1a;主線程的執行需要等待子線程執行完&#xff0c;等各個線程執行完畢后&#xff0c;主線程做收…

redis的高可用(主從復制和哨兵模式)

redis的高可用&#xff08;主從復制和哨兵模式&#xff09; redis的性能管理&#xff1a;redis的數據緩存在內存當中 INFO memory&#xff1a;查看redis內存使用情況 used_memory:1800800&#xff1a;redis中數據占用的內存 used_memory_rss:5783552&#xff1a;redis向操作…

Halcon Solution Guide I basics(3): Region Of Interest(有興趣區域/找重點)

文章目錄 文章專欄前言文章解讀前言創建ROI案例1&#xff1a;直接截取ROI手動截取ROI 總結ROI套路獲取窗口句柄截取ROI區域獲取有效區域 Stop組合 文章專欄 Halcon開發 Halcon學習 練習項目gitee倉庫 CSDN Major 博主Halcon文章推薦 前言 今天來看第三章內容&#xff0c;既然是…

QTableWidget——編輯單元格

文章目錄 前言熟悉QTableWiget&#xff0c;通過實現單元格的合并、拆分、通過編輯界面實現表格內容及屬性的配置、實現表格的粘貼復制功能熟悉QTableWiget的屬性 一、[單元格的合并、拆分](https://blog.csdn.net/qq_15672897/article/details/134476530?spm1001.2014.3001.55…

Docker實踐筆記7:構建MySQL 8鏡像

使用Docker構建MySQL 8鏡像并運行容器 本教程將指導您使用Dockerfile構建和運行一個MySQL 8容器。讓我們開始吧&#xff01; 步驟1&#xff1a;創建Dockerfile 在您的項目根目錄下創建一個名為Dockerfile的文件。以下是Dockerfile的示例內容&#xff1a; # 基于最新的MySQL…

docker、elasticsearch8、springboot3集成備忘

目錄 一、背景 二、安裝docker 三、下載安裝elasticsearch 四、下載安裝elasticsearch-head 五、springboot集成elasticsearch 一、背景 前兩年研究了一段時間elasticsearch&#xff0c;當時也是網上找了很多資料&#xff0c;最后解決個各種問題可以在springboot上運行了…

vue-使用input封裝上傳文件圖片全局組件

前言 實際開發過程中&#xff0c;我們經常遇見需要上傳文件圖片功能&#xff0c;可以封裝一個全局組件來調用 原理很簡單&#xff0c;首先獲取到文件或圖片對象&#xff0c;調用自己公司文檔服務器的接口&#xff0c;上傳文件圖片 為了方便用戶體驗&#xff0c;我們應該在上傳…

Godot

前言 為什么要研究開源引擎 主要原因有&#xff1a; 可以享受“信創”政策的紅利&#xff0c;非常有利于承接政府項目。中美脫鉤背景下&#xff0c;國家提出了“信創”政策。這個政策的核心就是&#xff0c;核心技術上自主可控。涉及的產業包括&#xff1a;芯片、操作系統、數據…

【Django使用】md文檔10大模塊第5期:Django數據庫增刪改查和Django視圖

Django的主要目的是簡便、快速的開發數據庫驅動的網站。它強調代碼復用&#xff0c;多個組件可以很方便的以"插件"形式服務于整個框架&#xff0c;Django有許多功能強大的第三方插件&#xff0c;你甚至可以很方便的開發出自己的工具包。這使得Django具有很強的可擴展…

Vue項目 配置項設置

一、項目運行時瀏覽器自動打開 找到package.json文件 找到"sctipts"配置項 在"serve"配置項最后加上--open "scripts": {"serve": "vue-cli-service serve --open","build": "vue-cli-service build&quo…

Redis面試內容,Redis過期策略,Redis持久化方式,緩存穿透、緩存擊穿和緩存雪崩,以及解決辦法

文章目錄 一、redis什么是RedisRedis使用場景1、緩存2、數據共享[分布式](https://so.csdn.net/so/search?q分布式&spm1001.2101.3001.7020)3、分布式鎖4、全局ID5、計數器6、限流7、位統計 Redis有5中數據類型&#xff1a; SSHLZRedis中一個key的值每天12點過期&#xff…

Cookie、Session、CBV加裝飾器的三種方法

【0】cookie、session和Token的發展史 【1】Cookie的形式 存儲形式&#xff1a;k&#xff1a;v鍵值對存儲位置&#xff1a;客戶端缺點&#xff1a;不安全&#xff0c;信息可能會泄露 【2】session的形式 標識符&#xff0c;表示我是當前用戶加密出來的數據對敏感信息進行加密…

排序算法-----快速排序(非遞歸實現)

目錄 前言 快速排序 基本思路 非遞歸代碼實現 前言 很久沒跟新數據結構與算法這一欄了&#xff0c;因為數據結構與算法基本上都發布完了&#xff0c;哈哈&#xff0c;那今天我就把前面排序算法那一塊的快速排序完善一下&#xff0c;前面只發布了快速排序遞歸算法&#xff0c;…

單鏈表相關面試題--3.鏈表的中間節點

3.鏈表的中間節點 876. 鏈表的中間結點 - 力扣&#xff08;LeetCode&#xff09; /* 解題思路&#xff1a; 通過快慢指針找到中間節點&#xff0c;快指針每次走兩步&#xff0c;慢指針每次走一步&#xff0c;當快指針走到結尾的時候&#xff0c;慢指針正好走到中間位置 */ typ…

HTTPS協議的加密流程

目錄 一&#xff0c;HTTPS是什么 二&#xff0c;兩種加密方式 三&#xff0c;HTTPS的加密過程 3.1 引入對稱加密 3.2 引入非對稱加密 3.3 引入證書 一&#xff0c;HTTPS是什么 HTTPS也是一個應用層協議&#xff0c;它是在HTTP協議的基礎上引入了一個加密層。因為HTTP協議…

每天一道算法題(十)——獲取和為k的子數組

文章目錄 1、問題2、示例3、解決方法&#xff08;1&#xff09;方法1——雙指針 總結 1、問題 給你一個整數數組 nums 和一個整數 k &#xff0c;請你統計并返回 該數組中和為 k 的子數組的個數 。 子數組是數組中元素的連續非空序列。 2、示例 示例 1&#xff1a; 輸入&#x…

多分類自定義采樣比例

多分類自定義采樣比例 import torch from torch.utils.data import DataLoader, Dataset, WeightedRandomSampler from torchvision import transforms from torchvision.datasets import ImageFolder# 假設你有一個自定義的數據集類 class CustomDataset(Dataset):def __init…