Redis 持久化機制

client Redis[內存] --> 內存數據、磁盤數據----> 磁盤,Redis官方提供了兩種不同的持久化方案將內存中的數據存儲在硬盤中:

快照(Snapshot)

AOF只追加日志文件。

1、快照(Snapshot)
1、快照的特點:

快照的方式是將某一時刻的數據全部寫入到磁盤中,也是Redus中默認的開啟持久化的方式。保存的文件是以.rdb結尾的文件。

需要注意的是:redis在哪個目錄下啟動,哪一個就是redis的工作目錄,后面的rdb持久化或者AOF持久化,產生的文件都存在于redis的當前工作目錄下。在哪里啟動就會讀取哪里的快照文件

2、快照的生成的方式:
1、客戶端的方式:通過bigsave、save指令

1、bigsave指令

當主進程接收到客戶端的寫命令的請求,主進程會調用fork函數來創建一個子進程,子進程負責進行快照,并將快照寫入到磁盤中。此時的父類會繼續的接受客戶端的寫數據的請求。

2、save指令

當主進程接收到客戶端的寫數據的請求,主進程會調用fork函數來創建一個子進程來進行快照并將數據存入磁盤中,此時子進程會拒絕外界客戶端寫數據的請求一直到子進程結束。

fork :當一個進程創建子線程的時候,底層的操作系統會創建進程的一個副本,在類似于unix系統中創建子線程的操作會進行優化,在剛開始的時候,父子進程共享相同的內存,知道父類進程或者子類進程對內存進行了寫之后,對被寫入的內存的共享才會結束服務
2、配置器配置自動觸發

1、修改配置文件redis.conf文件,用戶在redis.conf配置文件中設置了save配置選項,redis會在save選項條件滿足之后自動的觸發一次bgsave命令,如果設置多個save配置選項,當任意一個save配置文件條件滿足,redis也會觸發一次bgsave命令

?3、服務器接收客戶端shutdown指令

當redis通過shutdown指令接收到關閉服務器的請求時,會執行一個save命令,阻塞所有的客戶端,不再執行客戶端執行發送的任何命令,并且在save命令執行完畢之后關閉服務器。

修改快照的位置和名稱:   redis.conf 配置文件中:#1.修改生成快照名稱
- dbfilename dump.rdb# 2.修改生成位置
- dir ./
2、AOF只追加日志文件
1、特點:

將客戶端的所有的寫的命令都記錄在日志文件中,AOF持久化會將被執行的寫命令寫到AOF的文件中。以此來記錄數據發生的變化。因此只要Redis從頭執行一下這個日志文件就可以恢復到原先的數據集。

2、開啟AOF:

在redis中是默認不開啟AOF持久化的,需要在配置文件中開啟:

1、開啟AOF持久化:修改 appendonly  yes 
修改 appendfilename "appendonly.aof" 指定生成文件名稱

3、日志追加的頻率:
# 1.always 【謹慎使用】
- 說明: 每個redis寫命令都要同步寫入硬盤,嚴重降低redis速度
- 解釋: 如果用戶使用了always選項,那么每個redis寫命令都會被寫入硬盤,從而將發生系統崩潰時出現的數據丟失減到最少;遺憾的是,因為這種同步策略需要對硬盤進行大量的寫入操作,所以redis處理命令的速度會受到硬盤性能的限制;
- 注意: 轉盤式硬盤在這種頻率下200左右個命令/s ; 固態硬盤(SSD) 幾百萬個命令/s;
- 警告: 使用SSD用戶請謹慎使用always選項,這種模式不斷寫入少量數據的做法有可能會引發嚴重的`寫入放大`問題,導致將固態硬盤的壽命從原來的幾年降低為幾個月。# 2.everysec 【推薦默認】
- 說明: 每秒執行一次同步顯式的將多個寫命令同步到磁盤
- 解釋: 為了兼顧數據安全和寫入性能,用戶可以考慮使用everysec選項,讓redis每秒一次的頻率對AOF文件進行同步;redis每秒同步一次AOF文件時性能和不使用任何持久化特性時的性能相差無幾,而通過每秒同步一次AOF文件,redis可以保證,即使系統崩潰,用戶最多丟失一秒之內產生的數據。 # 3.no	【不推薦】
- 說明: 由操作系統決定何時同步 
- 解釋:最后使用no選項,將完全由操作系統決定什么時候同步AOF日志文件,這個選項不會對redis性能帶來影響但是系統崩潰時,會丟失不定數量的數據,甚至丟失全部數據,另外如果用戶硬盤處理寫入操作不夠快的話,當緩沖區被等待寫入硬盤數據填滿時,redis會處于阻塞狀態,并導致redis的處理命令請求的速度變慢。
4、修改同步的頻率:
# 1.修改日志同步頻率
- 修改appendfsync everysec|always|no 指定

3、AOF重寫:
1、AOF帶來的問題:

AOF會將所有寫數據的命令都寫入到日志文件中,假設連續的一百次操作都是相同,此時AOF會記錄這一百次的記錄,就會導致文件過大,因為要恢復數據庫的狀態其實文件中保存一條數據就夠了,為了壓縮aof的持久化文件Redis提供了AOF重寫(ReWriter)機制。

2、AOF重寫:

在一定的程度上可以減少AOF文件的體積,并且能夠保證數據不丟失。

3、AOF觸發的方式:
1、客戶端觸發的方式:
bgrewriteaof
2、服務器配置方式自動的觸發:
- 配置redis.conf中的auto-aof-rewrite-percentage選項 
- 如果設置auto-aof-rewrite-percentage值為100和auto-aof-rewrite-min-size 64mb,
并且啟用的AOF持久化時,那么當AOF文件體積大于64M,并且AOF文件的體積比上一次重寫之后體積大了至少一倍(100%)時,會自動觸發,
如果重寫過于頻繁,用戶可以考慮將auto-aof-rewrite-percentage設置為更大
4、AOF的重寫機制的原理
1、7.0.0版本之前:

1、首先,當主進程觸發AOF重寫機制的時候,主進程會調用fork函數創建一個子進程進行快照,并將生成的dump文件用指令的方式寫入臨時文件中,子進程會將完成寫入臨時文件通知給主進程。

2、此時主進程還會繼續接受客戶端的寫數據的命令,主進程會繼續向原先的aof文件中記錄命令,同時也會將命令緩存到內存中,當主進程接受到子進程寫入完成這個命令的時候,會將緩存在內存中的寫數據指令同步到臨時文件中。

3、當內存中的指令寫入后,臨時文件就會替換掉原先的aof文件。

2、7.0.0版本之后:

1、首先,當主進程觸發AOF重寫機制的時候,主進程會調用fork函數創建一個子進程進行快照,并將生成的dump文件用指令的方式寫入臨時文件中,和原先快照文件一起以命令的方式寫入到臨時文件中。

2、此時主進程還會繼續接收客戶端的寫數據的命令,此時將命令寫入新的增量文件中,同時也會將命令寫入到就的增量文件中(aof文件)。

3、然后將舊的增量文件和臨時文件合并生成一個臨時清單

4、底層通過讀取這個臨時清單去重寫生成一個新的rdb文件去替換原先舊的基本文件。

與之前的最大的改變就是將原先的單個AOF文件拆分成一個基本文件和多個增來文件,基本文件負責的是重寫AOF之前已經存在的數據和一些快照的數據。增量文件負責的是一些增量的修改。都會存在在一個單獨的文件中,并由清單文件所管理。

5、總結:

兩種持久化方案既可以同時使用(aof),又可以單獨使用,在某種情況下也可以都不使用,具體使用那種持久化方案取決于用戶的數據和應用決定。

無論使用AOF還是快照機制持久化,將數據持久化到硬盤都是有必要的,除了持久化外,用戶還應該對持久化的文件進行備份(最好備份在多個不同地方)。

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

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

相關文章

如何用CHAT解釋文章含義?

問CHAT:解釋“ 本身樂善好施,令名遠近共欽,待等二十左右,定有高親可攀;而且四德俱備,幫夫之緣亦有。主持家事不紊,上下亦無閑言。但四十交進,家內謹防口舌,須安家堂&…

分布式篇---第一篇

系列文章目錄 文章目錄 系列文章目錄前言一、分布式冪等性如何設計?二、簡單一次完整的 HTTP 請求所經歷的步驟?三、說說你對分布式事務的了解前言 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到網站,這篇文章男女通用,…

非遺之光:十八數藏柏松數字保護的璀璨之路

隨著數字技術的崛起,非物質文化遺產的保護進入了一個新的紀元。在這個時代的先鋒中,十八數藏以其對傳統工藝的數字保護而獨領風騷。這是一條璀璨之路,通過數字技術的應用,為傳統工藝注入了新的活力。 十八數藏柏松將數字創新融入傳…

軟件包管理器yum和git

目錄 一、Linux軟件包管理器yum 1、Linux下的軟件安裝方法 2、了解yum 1、實際例子引入 2、yum 3、查找軟件包 4、安裝軟件包 5、卸載軟件 二、git 一、Linux軟件包管理器yum 1、Linux下的軟件安裝方法 1、在Linux下安裝軟件,一個通常的辦法是下載到程序的源…

c 一維數組轉為二維數組

通過數組指針來轉換 用這種方法可以把屏幕mmap 中的數據轉為二維的長乘高的數據 #include <stdio.h>int main() {int mm[5] { 0,1,2,3,4 };int (*pm)[3] (int (*)[3])mm; //pm 排 &#xff0c;[3]表示列printf("%d\n", pm[0][2]); // {0,1,2}…

經典百搭女童加絨衛衣,看的見的時尚

經典版型套頭衛衣 寬松百搭不挑人穿 單穿內搭都可以 胸口處有精美的小熊印花 面料是復合柔軟奧利絨 暖和又不顯臃腫哦&#xff01;&#xff01;

Jenkins+Maven+Gitlab+Tomcat 自動化構建打包、部署

JenkinsMavenGitlabTomcat 自動化構建打包、部署 1、環境需求 本帖針對的是Linux環境&#xff0c;Windows或其他系統也可借鑒。具體只講述Jenkins配置以及整個流程的實現。 1.JDK&#xff08;或JRE&#xff09;及Java環境變量配置&#xff0c;我用的是JDK1.8.0_144&#xff0…

排序算法--快速排序

實現邏輯 ① 從數列中挑出一個元素&#xff0c;稱為 “基準”&#xff08;pivot&#xff09;&#xff0c; ② 重新排序數列&#xff0c;所有元素比基準值小的擺放在基準前面&#xff0c;所有元素比基準值大的擺在基準的后面&#xff08;相同的數可以到任一邊&#xff09;。在這…

LoRa技術-什么是LoRa

1 概述 LoRa是創建長距離通信連接的物理層無線調制技術&#xff0c;屬于CCS&#xff08;線性調制擴頻技術&#xff09;的一種&#xff0c;工作頻段范圍在Sub-1GHz以下。相較于傳統的FSK等技術&#xff0c;LoRa在保持低功耗的同時極大地增加了通訊距離&#xff0c;且具備抗干擾…

2023年度openGauss標桿應用實踐案例征集

標桿應用實踐案例征集 2023 openGauss 數據庫作為企業IT系統的核心組成部分&#xff0c;是數字基礎設施建設的關鍵&#xff0c;是實現數據安全穩定的保障。openGauss順應開源發展趨勢&#xff0c;強化核心技術突破&#xff0c;著力打造自主根社區&#xff0c;攜手產業伙伴共同…

【開源】基于JAVA的高校實驗室管理系統

項目編號&#xff1a; S 015 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S015&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S015&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、研究內容2.1 實驗室類型模塊2.2 實驗室模塊2.3 實…

這個問題你必須關注!網上申請的流量卡未激活是否可以更換套餐?

資費低&#xff0c;流量多&#xff0c;所以近年來在網上申請流量卡已經成了一種趨勢&#xff0c;雖然在網上申請流量卡比較方便&#xff0c;但是很多問題大家都比較迷惑&#xff0c;就比如&#xff0c;下面有私信小編的一個問題。 ?  網友咨詢&#xff0c;網上申請的流量卡…

PTA-用天平找小球

三個球A、B、C&#xff0c;大小形狀相同且其中有一個球與其他球重量不同。要求找出這個不一樣的球。 輸入格式&#xff1a; 輸入在一行中給出3個正整數&#xff0c;順序對應球A、B、C的重量。 輸出格式&#xff1a; 在一行中輸出唯一的那個不一樣的球。 輸入樣例&#xff…

內衣洗衣機哪些品牌質量好實惠?小型洗衣機全自動

現在洗內衣內褲也是一件較麻煩的事情了&#xff0c;在清洗過程中還要用熱水殺菌&#xff0c;還要確保洗衣液是否有沖洗干凈&#xff0c;還要防止細菌的滋生等等&#xff0c;所以入手一款小型的烘洗全套的內衣洗衣機是非常有必要的&#xff0c;專門的內衣洗衣機可以最大程度減少…

Spring中的循環依賴的解決辦法

Spring中的循環依賴的解決辦法 文章目錄 Spring中的循環依賴的解決辦法情形一&#xff1a;使用構造注入方式注入依賴情形二&#xff1a;使用Setter方式進行依賴注入情形三&#xff1a;使用延遲加載進行依賴注入情形四&#xff1a;使用第三方庫進行依賴注入 先說明&#xff1a;推…

windows上安裝DBeaver

訪問 DBeaver 的官方網站&#xff08;https://dbeaver.io/&#xff09;。 在主頁上找到并點擊 "Download" 或 "Get DBeaver Now"&#xff08;獲取 DBeaver&#xff09;按鈕。 您將看到不同的下載選項&#xff0c;選擇適用于 Windows 的安裝程序。通常為 …

重磅!2023年兩院院士增選名單公布

中國科學院 關于公布2023年中國科學院院士增選當選院士名單的公告 根據《中國科學院院士章程》《中國科學院院士增選工作實施辦法&#xff08;試行&#xff09;》等規定&#xff0c;2023年中國科學院選舉產生了59名中國科學院院士。 現予公布。 中國科學院 2023年11月22日…

設計模式——結構型模式

結構型模式描述如何將類或對象按某種布局組成更大的結構。它分為類結構型模式和對象結構型模式,前者采用繼承機制來組織接口和類,后者釆用組合或聚合來組合對象。 由于組合關系或聚合關系比繼承關系耦合度低,滿足“合成復用原則”,所以對象結構型模式比類結構型模式具有更…

機器學習算法(1)——簡單線性回歸

一、說明 在在這篇文章中&#xff0c;我們將學習我們的第一個機器學習算法&#xff0c;稱為簡單線性回歸。這是一個重要的算法&#xff0c;因為當您可能正在學習第一個神經網絡&#xff08;稱為人工神經網絡&#xff09;時&#xff0c;在此算法中學習的技術也適用于深度學習。我…

畢業設計ASP.NET 1400動漫公司網站【程序源碼+文檔+調試運行】

摘要 本系統將實現一個動漫公司網站&#xff0c;包括前臺用戶模塊和后臺管理員模塊。前臺用戶模塊主要包括最新動漫、注冊登錄、公司簡介、公司新聞、動漫中心、聯系我們和會員中心等功能。后臺管理員模塊包括用戶管理、公司簡介管理、公司新聞管理、動漫類別管理、動漫管理、…