尚硅谷redis7 28-32 redis持久化之理論介紹

28redis持久化之理論介紹

redis持久化:redis如何將內存數據寫入磁盤中

為什么需要持久化?

內存數據一斷電就會消失,那么所有的請求都會打到數據庫中。因此讓redis中的數據長期持有,不管是重啟、故障、恢復、宕機,還是能從磁盤上讀回曾經保存的數據。

一般redis持久化指的是RDB[Redis Database] 和 AOF[Append Only File]。可以選擇其中一種,也可以兩種都使用,將內存數據寫入磁盤中。

  • persistent snapshot【RDB】:快照,將數據打包生成rdb文件。用于整體恢復。
  • Append Only File【AOF】:將所有寫命令的操作都記錄下來。恢復時挨個挨個重新運行一次。

29 redis持久化之RDB簡介

RDB(Redis數據庫):RDB持久性以指定的時間間隔執行數據集的時間點快照。

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

如果服務器掛了,redis緩存數據在重啟的時候將會通過硬盤里存儲的rgb文件加載回來。

作用:在指定的時間間隔內將內存中的數據集快照寫入磁盤,也就是行話講的Snapshot內存快照,它恢復時再將硬盤快照文件直接讀回到內存里
一鍋端:Redis的數據都在內存中,保存備份時它執行的是全量快照,也就是說,把內存中的所有數據都記錄到磁盤中,一鍋端

Rdb保存的是dump.rdb文件

redis6版本的redis.conf文件中找到snapshotting ,主要用來設置redis中的rdb。

######## SNAPSHOTTING#######

Save the DB on disk:

save <seconds> <changes>

Will save the DB if both the given number of seconds and the given
number of write operations against the DB occurred.

In the example below the behavior will be to save:? //發生以下行為將會保存
after 900 sec (15 min) if at least 1 key changed // 15分鐘內有1次修改
after 300 sec (5 min) if at least 10 keys changed // 5分鐘內有10此修改
after 60 sec if at least 10000 keys changed? // 1分鐘內有1萬次修改

Note: you can disable saving completely by commenting out all "save" lines.

It is also possible to remove all the previously configured save
points by adding a save directive with a single empty string argument
like in the following example:

save ""

save 900 1
save 300 10
save 60 10000

總結:

Redis6.0.16以下

自動觸發:
在 Redie.conf 配置文件中的 SNAPSHOTTING 下配置 save 參數,來觸發Redis的 RDB持久化條件,
比如“save m n”:表示m秒內數據集存在 n 次修改時,自動觸發 bgsave
save 900 1:每隔 900s(15min),如果有超過1個key 發生了變化,就寫一份新的 RDB 文件
save 300 10:每隔 300s(5min),如果有超過10個key 發生了變化,就寫一份新的 RDB 文件
save 60 10000:每隔 60s(1min),如果有超過 10000個key發生了變化,就寫一份新的RDB文件

redis7

除非另有指定,Redis 默認會在以下情況下保存數據庫(持久化):

  • 在 3600 秒(1 小時)后,如果至少執行了 1 次修改

  • 在 300 秒(5 分鐘)后,如果至少執行了 100 次修改

  • 在 60 秒后,如果至少執行了 10000 次修改

30?redis持久化之RDB配置說明

網站說明:

默認情況下,Redis 會將數據集的快照保存到磁盤上的一個名為 dump.rdb 的二進制文件中。
你可以配置 Redis:當在 N 秒內數據集發生了至少 M 次修改時,就自動保存一次數據集,或者你也可以手動調用 SAVEBGSAVE 命令來執行保存操作。

案例5秒2次修改

vim redis7.conf

linux常用快捷鍵:

復制:Ctrl + Shift + C

粘貼:Ctrl + Shift + V

保存并退出:esc? :wq

保存不退出:esc :w

修改文件:i 在當前光標前插入

vim中查找:

  • 輸入 /關鍵詞 然后回車 → 向下查找

  • 輸入 ?關鍵詞 然后回車 → 向上查找

  • n → 查找下一個匹配

  • N → 查找上一個匹配

我沒有修改路徑,所以進入redis.conf還是按照默認的路徑

cd?/usr/local/src/redis路徑

vim redis.conf

save 5 2

修改dump文件保存路徑

修改dump文件名稱

修改后重啟一下配置文件

redis-server redis.conf的文件路徑

操作時的tips: 剛開始配置并沒有成功,但路徑下出現了log文件。檢查后發現是reids端口被占用導致配置失敗。因此重啟配置文件的時候一定要關閉目前的redis進程。【sudo systemctl stop redis?停止已有的 Redis 實例或其他占用該端口的程序】。

31 redis持久化之RDB自動觸發

save 5 2的含義是在5s秒修改兩次就進行快照。如圖,5s內更改一次并不會更新rdb文件。

如何恢復

將備份文件(dump.rdb)移動到redis安裝目錄并啟動服務即可。備份成功后故意用flushdb清空redis,看看是否可以恢復數據
物理恢復,一定服務和備份分機隔離

把當前目錄下的 dump6379.rdb 文件 重命名dump6379.rdb.bak

mv dump6379.rdb dump6379.rdb.bak

在redis中清掉當前數據

FLUSHDB

此時再檢查 /myredis/dumpfiles目錄

因為當我們使用一個提交命令,類似于終止命令時,redis為了保證事物的一致性,也會自動生成rdb文件。

重啟一下配置文件

redis-server redis.conf的文件路徑

再次連接redis服務器后運行keys* 發現redis數據庫為空

因為重新連接時,redis加載的是新生成的rdb文件。而此文件提交時清空了數據庫,因此加載后數據庫也為空。

結論:執行flushall/flushdb命令也會產生dump.rdb文件,但里面是空的,無意義

快捷鍵? 退出redis:輸入quit ,exit或按ctrl+D

物理恢復

首先強制刪除掉/myredis/dumpfiles中的dump6379.rdb文件

rm -f?dump6379.rdb

SHUTDOWN? // 退出

// 發現/myredis/dumpfiles中又生成了dump6379.rdb文件

?SHUTDOWN :

  • SHUTDOWN 是 Redis 的內置命令,會優雅地關閉 Redis 服務。

  • 它會將內存中的數據持久化到 dump.rdb(如果配置了 RDB),然后關閉服務。

再次清除掉/myredis/dumpfiles中的dump6379.rdb文件

把當前目錄下的 dump6379.rdb.bak 文件 重命名dump6379.rdb

此時再重新啟動配置文件,數據庫恢復。

備注:不可以把備份文件dump.rdb和生產redis服務器放在同一臺機器,必須分開各自存儲
以防生產機物理損壞后備份文件也掛了。

32 redis持久化之RDB手動觸發

為什么要手動觸發?假如我們存儲了很重要的數據,那么手動立刻保存更加保險。

redis提供了兩個命令來生成RDB文件,分別是save和bgsave

工作原理(How it works)

每當 Redis 需要將數據集保存到磁盤時,會執行以下操作:

  1. Redis 會進行一次 fork 操作(派生一個新進程)。此時會有一個 子進程 和一個 父進程

  2. 子進程并不影響出進程的運行,開始將數據集寫入一個 臨時的 RDB 文件

  3. 當子進程完成新 RDB 文件的寫入后,它會 替換舊的 RDB 文件

這種方式使 Redis 能夠利用操作系統的 寫時復制(copy-on-write)機制 來提高效率。

save【一般不適用】

在主程序中執行會阻塞當前redis服務器,直到持久化工作完成。執行save命令期間,Redis不能處理其他命令【包括緩存服務器對外提供服務的功能,若redis數據量很大,則save的過程會嚴重阻礙其他進程的運行】,線上禁止使用

bgsave

Redis會在后臺異步進行快照操作,不阻塞快照同時還可以響應客戶端請求,該觸發方式會fork一個子進程由子進程復制持久化過程。

Redis會使用bgsave對當前內存中的所有數據做快照,這個操作是子進程在后臺完成的,這就允許主進程同時可以修改數據。
fork是什么?:程序【父進程】運行到 fork() 時,會從當前進程中“克隆”出一個一模一樣的新進程【子進程】,兩者并行運行。

LASTSAVE

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

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

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

相關文章

JS逆向【抖查查】逆向分析 | sign | secret簽名驗證

1.目標 目標網址&#xff1a;https://www.douchacha.com/bloggerRankingRise 切換日期出現目標請求 import requests import jsonheaders {"accept": "application/json, text/plain, */*","accept-language": "zh-CN,zh;q0.9","…

【數據倉庫面試題合集④】SQL 性能調優:面試高頻場景 + 調優策略解析

隨著業務數據規模的持續增長,SQL 查詢的執行效率直接影響到數據平臺的穩定性與數據產出效率。因此,在數據倉庫類崗位的面試中,SQL 性能調優常被作為重點考察內容。 本篇將圍繞常見 SQL 調優問題,結合實際經驗,整理出高頻面試題與答題參考,助你在面試中游刃有余。 ?? 高…

python打卡訓練營打卡記錄day37

知識點回顧&#xff1a; 過擬合的判斷&#xff1a;測試集和訓練集同步打印指標模型的保存和加載 僅保存權重保存權重和模型保存全部信息checkpoint&#xff0c;還包含訓練狀態 早停策略 作業&#xff1a;對信貸數據集訓練后保存權重&#xff0c;加載權重后繼續訓練50輪&#xf…

卷積神經網絡(CNN)深度講解

卷積神經網絡&#xff08;CNN&#xff09; 本篇博客參考自大佬的開源書籍&#xff0c;幫助大家從頭開始學習卷積神經網絡&#xff0c;謝謝各位的支持了&#xff0c;在此期待各位能與我共同進步? 卷積神經網絡&#xff08;CNN&#xff09;是一種特殊的深度學習網絡結構&#x…

深度體驗:海螺 AI,開啟智能創作新時代

人工智能 AI 工具如雨后春筍般涌現&#xff0c;而海螺 AI 以其獨特的魅力與卓越的性能&#xff0c;迅速在眾多產品中嶄露頭角&#xff0c;成為了無數創作者、辦公族以及各行業人士的得力助手。近期&#xff0c;我對海螺 AI 進行了深入的使用體驗&#xff0c;接下來就為大家詳細…

哈希表day5

242 有效的字母異位詞 思路就是轉為ASCII碼&#xff0c;然后用一個數組記錄26位字母出現的次數 #include <string> class Solution{ public:bool isAnagram(string s,string t){int record[26]{0};for (int i0;i<s.size();i){record[s[i]-a];}for (int i0;i<t.si…

【Python數據庫全棧指南】從SQL到ORM深度實踐

目錄 &#x1f31f; 前言&#x1f3d7;? 技術背景與價值&#x1fa79; 當前技術痛點&#x1f6e0;? 解決方案概述&#x1f465; 目標讀者說明 &#x1f9e0; 一、技術原理剖析&#x1f4ca; 核心概念圖解&#x1f4a1; 核心作用講解&#x1f527; 關鍵技術模塊說明?? 技術選…

Android磁盤占用優化全解析:從監控到治理的存儲效率革命

引言 隨著移動應用功能的復雜化&#xff0c;磁盤占用問題日益突出。據統計&#xff0c;國內頭部應用的平均安裝包大小已超100MB&#xff0c;運行時緩存、日志、圖片等數據更可能使磁盤占用突破GB級。過度的磁盤消耗不僅影響用戶設備空間&#xff0c;還可能觸發系統的“應用數據…

AJAX-讓數據活起來(一):入門

目錄 一、AJAX概念和axios使用 1.1 什么是AJAX ? 1.2 怎么用AJAX ? 1.3 axios使用 二、認識URL 2.1 什么是URL? 2.2 URL的組成 組成 協議 域名 資源路徑 獲取-新聞列表 三、URL查詢參數 URL查詢參數 axios - 查詢參數 四、常用請求方法和數據提交 常用請求…

【C++篇】list模擬實現

實現接口&#xff1a; list的無參構造、n個val構造、拷貝構造 operator重載 實現迭代器 push_back() push_front() erase() insert() 頭尾刪 #pragma once #include<iostream> #include<assert.h> using namespace std;namespace liu {//定義list節點temp…

Go 語言范圍循環變量重用問題與 VSCode 調試解決方法

文章目錄 問題描述問題原因1. Go 1.21 及更早版本的范圍循環行為2. Go 1.22 的改進3. VSCode 調試中的問題4. 命令行 dlv debug 的正確輸出 三種解決方法1. 啟用 Go 模塊2. 優化 VSCode 調試配置3. 修改代碼以確保兼容性4. 清理緩存5. 驗證環境 驗證結果結論 在 Go 編程中&…

快速創建 Vue 3 項目

安裝 Node.js 和 Vue CL 安裝 Node.js&#xff1a;訪問 https://nodejs.org/ 下載并安裝 LTS 版本。 安裝完后&#xff0c;在終端檢查版本&#xff1a; node -v npm -v安裝 Vue CLI&#xff08;全局&#xff09;&#xff1a; npm install -g vue/cli創建 Vue 3 項目 vue cr…

java學習日志——Spring Security介紹

使用Spring Security要重寫UserDetailsService的loadUserByUsername方法&#xff08;相當于自定了認證邏輯&#xff09;

【C++進階篇】初識哈希

哈希表深度剖析&#xff1a;原理、沖突解決與C容器實戰 一. 哈希1.1 哈希概念1.2 哈希思想1.3 常見的哈希函數1.3.1 直接定址法1.3.2 除留余數法1.3.3 乘法散列法&#xff08;了解&#xff09;1.3.4 平方取中法&#xff08;了解&#xff09; 1.4 哈希沖突1.4.1 沖突原因1.4.2 解…

單機Kafka配置ssl并在springboot使用

目錄 SSL證書生成根證書生成服務端和客戶端證書生成keystore.jks和truststore.jks輔助腳本單獨生成truststore.jks 環境配置hosts文件kafka server.properties配置ssl 啟動kafkakafka基礎操作springboot集成準備工作需要配置的文件開始消費 SSL證書 證書主要包含兩大類&#x…

PCB設計教程【入門篇】——電路分析基礎-元件數據手冊

前言 本教程基于B站Expert電子實驗室的PCB設計教學的整理&#xff0c;為個人學習記錄&#xff0c;旨在幫助PCB設計新手入門。所有內容僅作學習交流使用&#xff0c;無任何商業目的。若涉及侵權&#xff0c;請隨時聯系&#xff0c;將會立即處理 目錄 前言 一、數據手冊的重要…

Vue2實現Office文檔(docx、xlsx、pdf)在線預覽

&#x1f31f; 前言 歡迎來到我的技術小宇宙&#xff01;&#x1f30c; 這里不僅是我記錄技術點滴的后花園&#xff0c;也是我分享學習心得和項目經驗的樂園。&#x1f4da; 無論你是技術小白還是資深大牛&#xff0c;這里總有一些內容能觸動你的好奇心。&#x1f50d; &#x…

【辰輝創聚生物】JAK-STAT信號通路相關蛋白:細胞信號傳導的核心樞紐

在細胞間復雜的信號傳遞網絡中&#xff0c;Janus 激酶 - 信號轉導和轉錄激活因子&#xff08;JAK-STAT&#xff09;信號通路猶如一條高速信息公路&#xff0c;承擔著傳遞細胞外信號、調控基因表達的重要使命。JAK-STAT 信號通路相關蛋白作為這條信息公路上的 “關鍵節點” 和 “…

OceanBase數據庫從入門到精通(運維監控篇)

文章目錄 一、OceanBase 運維監控體系概述二、OceanBase 系統表與元數據查詢2.1 元數據查詢基礎2.2 核心系統表詳解2.3 分區元數據查詢實戰三、OceanBase 性能監控SQL詳解3.1 關鍵性能指標監控3.2 SQL性能分析實戰四、OceanBase 空間使用監控4.1 表空間監控體系4.2 空間使用趨勢…

linux 進程間通信_共享內存

目錄 一、什么是共享內存&#xff1f; 二、共享內存的特點 優點 缺點 三、使用共享內存的基本函數 1、創建共享內存shmget() 2、掛接共享內存shmat 3、脫離掛接shmdt 4、共享內存控制shmctl 5.查看和刪除共享內存 comm.hpp server.cc Client.cc Makefile 一、什么…