成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Redis兩種持久化機制RDB和AOF詳解

存儲 存儲軟件 Redis
redis是一個內存數據庫,數據保存在內存中,但是我們都知道內存的數據變化是很快的,也容易發生丟失。幸好Redis還為我們提供了持久化的機制,分別是RDB(Redis DataBase)和AOF(Append Only File)。

 redis是一個內存數據庫,數據保存在內存中,但是我們都知道內存的數據變化是很快的,也容易發生丟失。幸好Redis還為我們提供了持久化的機制,分別是RDB(Redis DataBase)和AOF(Append Only File)。

在這里假設你已經了解了redis的基礎語法,某字母網站都有很好的教程,可以去看。基本使用的文章就不寫了,都是一些常用的命令。

[[311929]]

下面針對這兩種方式來介紹一下。由淺入深。

一、持久化流程

既然redis的數據可以保存在磁盤上,那么這個流程是什么樣的呢?

要有下面五個過程:

(1)客戶端向服務端發送寫操作(數據在客戶端的內存中)。

(2)數據庫服務端接收到寫請求的數據(數據在服務端的內存中)。

(3)服務端調用write這個系統調用,將數據往磁盤上寫(數據在系統內存的緩沖區中)。

(4)操作系統將緩沖區中的數據轉移到磁盤控制器上(數據在磁盤緩存中)。

(5)磁盤控制器將數據寫到磁盤的物理介質中(數據真正落到磁盤上)。

這5個過程是在理想條件下一個正常的保存流程,但是在大多數情況下,我們的機器等等都會有各種各樣的故障,這里劃分了兩種情況:

(1)Redis數據庫發生故障,只要在上面的第三步執行完畢,那么就可以持久化保存,剩下的兩步由操作系統替我們完成。

(2)操作系統發生故障,必須上面5步都完成才可以。

在這里只考慮了保存的過程可能發生的故障,其實保存的數據也有可能發生損壞,需要一定的恢復機制,不過在這里就不再延伸了。現在主要考慮的是redis如何來實現上面5個保存磁盤的步驟。它提供了兩種策略機制,也就是RDB和AOF。

二、RDB機制

RDB其實就是把數據以快照的形式保存在磁盤上。什么是快照呢,你可以理解成把當前時刻的數據拍成一張照片保存下來。

RDB持久化是指在指定的時間間隔內將內存中的數據集快照寫入磁盤。也是默認的持久化方式,這種方式是就是將內存中數據以快照的方式寫入到二進制文件中,默認的文件名為dump.rdb。

在我們安裝了redis之后,所有的配置都是在redis.conf文件中,里面保存了RDB和AOF兩種持久化機制的各種配置。

既然RDB機制是通過把某個時刻的所有數據生成一個快照來保存,那么就應該有一種觸發機制,是實現這個過程。對于RDB來說,提供了三種機制:save、bgsave、自動化。我們分別來看一下

1、save觸發方式

該命令會阻塞當前Redis服務器,執行save命令期間,Redis不能處理其他命令,直到RDB過程完成為止。具體流程如下:

 

Redis兩種持久化機制RDB和AOF詳解(面試常問,工作常用)

 

執行完成時候如果存在老的RDB文件,就把新的替代掉舊的。我們的客戶端可能都是幾萬或者是幾十萬,這種方式顯然不可取。

2、bgsave觸發方式

執行該命令時,Redis會在后臺異步進行快照操作,快照同時還可以響應客戶端請求。具體流程如下:

 

Redis兩種持久化機制RDB和AOF詳解(面試常問,工作常用)

 

具體操作是Redis進程執行fork操作創建子進程,RDB持久化過程由子進程負責,完成后自動結束。阻塞只發生在fork階段,一般時間很短。基本上 Redis 內部所有的RDB操作都是采用 bgsave 命令。

3、自動觸發

自動觸發是由我們的配置文件來完成的。在redis.conf配置文件中,里面有如下配置,我們可以去設置:

①save:這里是用來配置觸發 Redis的 RDB 持久化條件,也就是什么時候將內存中的數據保存到硬盤。比如“save m n”。表示m秒內數據集存在n次修改時,自動觸發bgsave。

默認如下配置:

#表示900秒內如果至少有1個key的值變化,則保存save9001#表示300秒內如果至少有10個key的值變化,則保存save30010#表示60秒內如果至少有10000個key的值變化,則保存save6010000

不需要持久化,那么你可以注釋掉所有的 save 行來停用保存功能。

②stop-writes-on-bgsave-error :默認值為yes。當啟用了RDB且最后一次后臺保存數據失敗,Redis是否停止接收數據。這會讓用戶意識到數據沒有正確持久化到磁盤上,否則沒有人會注意到災難(disaster)發生了。如果Redis重啟了,那么又可以重新開始接收數據了

③rdbcompression ;默認值是yes。對于存儲到磁盤中的快照,可以設置是否進行壓縮存儲。

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

⑤dbfilename :設置快照的文件名,默認是 dump.rdb

⑥dir:設置快照文件的存放路徑,這個配置項一定是個目錄,而不能是文件名。

我們可以修改這些配置來實現我們想要的效果。因為第三種方式是配置的,所以我們對前兩種進行一個對比:

 

Redis兩種持久化機制RDB和AOF詳解(面試常問,工作常用)

 

4、RDB 的優勢和劣勢

①、優勢

(1)RDB文件緊湊,全量備份,非常適合用于進行備份和災難恢復。

(2)生成RDB文件的時候,redis主進程會fork()一個子進程來處理所有保存工作,主進程不需要進行任何磁盤IO操作。

(3)RDB 在恢復大數據集時的速度比 AOF 的恢復速度要快。

②、劣勢

RDB快照是一次全量備份,存儲的是內存數據的二進制序列化形式,存儲上非常緊湊。當進行快照持久化時,會開啟一個子進程專門負責快照持久化,子進程會擁有父進程的內存數據,父進程修改內存子進程不會反應出來,所以在快照持久化期間修改的數據不會被保存,可能丟失數據。

三、AOF機制

全量備份總是耗時的,有時候我們提供一種更加高效的方式AOF,工作機制很簡單,redis會將每一個收到的寫命令都通過write函數追加到文件中。通俗的理解就是日志記錄。

1、持久化原理

他的原理看下面這張圖:

 

Redis兩種持久化機制RDB和AOF詳解(面試常問,工作常用)

 

每當有一個寫命令過來時,就直接保存在我們的AOF文件中。

2、文件重寫原理

AOF的方式也同時帶來了另一個問題。持久化文件會變的越來越大。為了壓縮aof的持久化文件。redis提供了bgrewriteaof命令。將內存中的數據以命令的方式保存到臨時文件中,同時會fork出一條新進程來將文件重寫。

 

Redis兩種持久化機制RDB和AOF詳解(面試常問,工作常用)

 

重寫aof文件的操作,并沒有讀取舊的aof文件,而是將整個內存中的數據庫內容用命令的方式重寫了一個新的aof文件,這點和快照有點類似。

3、AOF也有三種觸發機制

(1)每修改同步always:同步持久化 每次發生數據變更會被立即記錄到磁盤 性能較差但數據完整性比較好

(2)每秒同步everysec:異步操作,每秒記錄 如果一秒內宕機,有數據丟失

(3)不同no:從不同步

 

Redis兩種持久化機制RDB和AOF詳解(面試常問,工作常用)

 

4、優點

(1)AOF可以更好的保護數據不丟失,一般AOF會每隔1秒,通過一個后臺線程執行一次fsync操作,最多丟失1秒鐘的數據。

(2)AOF日志文件沒有任何磁盤尋址的開銷,寫入性能非常高,文件不容易破損。

(3)AOF日志文件即使過大的時候,出現后臺重寫操作,也不會影響客戶端的讀寫。

(4)AOF日志文件的命令通過非常可讀的方式進行記錄,這個特性非常適合做災難性的誤刪除的緊急恢復。比如某人不小心用flushall命令清空了所有數據,只要這個時候后臺rewrite還沒有發生,那么就可以立即拷貝AOF文件,將最后一條flushall命令給刪了,然后再將該AOF文件放回去,就可以通過恢復機制,自動恢復所有數據

5、缺點

(1)對于同一份數據來說,AOF日志文件通常比RDB數據快照文件更大

(2)AOF開啟后,支持的寫QPS會比RDB支持的寫QPS低,因為AOF一般會配置成每秒fsync一次日志文件,當然,每秒一次fsync,性能也還是很高的

(3)以前AOF發生過bug,就是通過AOF記錄的日志,進行數據恢復的時候,沒有恢復一模一樣的數據出來。

四、RDB和AOF到底該如何選擇

選擇的話,兩者加一起才更好。因為兩個持久化機制你明白了,剩下的就是看自己的需求了,需求不同選擇的也不一定,但是通常都是結合使用。有一張圖可供總結:

 

Redis兩種持久化機制RDB和AOF詳解(面試常問,工作常用)

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2019-05-17 08:55:49

RedisRDBAOF

2025-01-22 10:16:46

RedisRDBAOF

2023-05-11 09:12:35

RedisRDB日志

2023-09-12 10:49:44

Redis數據庫

2024-09-06 17:49:46

2024-09-12 08:49:53

2021-07-18 07:59:42

RedisRDBAOF

2021-03-10 00:02:01

Redis

2025-05-12 08:30:00

RedisRDBAOF

2024-03-26 00:03:08

Redis數據RDB

2024-09-29 09:25:53

2020-12-11 11:40:37

RDBAOFRedis

2021-10-18 07:43:30

RedisAOF日志RDB快照

2023-03-13 08:08:48

數據庫Redis

2021-02-04 08:01:35

RedisRDBAOF

2021-01-05 10:48:38

RedisAOF日志RDB快照

2023-10-23 11:22:06

Redis數據持久化

2020-02-18 16:14:33

RedisRDBAOF

2021-06-04 12:05:03

Redis Bitmap 數據庫

2020-03-03 14:15:49

Redis持久化數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕爱爱视频 | 日韩在线精品 | 粉嫩国产精品一区二区在线观看 | 欧美成视频 | 特黄小视频| 中文字幕视频在线免费 | 日本欧美视频 | 日韩免费av一区二区 | 久久久黄色 | av在线播放不卡 | 一级一级一级毛片 | 欧美日韩视频在线 | 精品国产一区二区三区性色av | 久久久久久久国产 | 国产高清视频在线观看 | 亚洲入口| 欧美国产精品一区二区三区 | 蜜桃在线一区二区三区 | 亚洲在线一区 | 97综合在线 | www.成人在线视频 | 一区二区三区视频在线观看 | 国产精品伦一区二区三级视频 | 日本天天操 | 精品国产一区二区三区久久 | av电影一区 | 精品日韩在线 | 国产亚洲欧美在线 | 日韩欧美亚洲 | 亚洲国产精品第一区二区 | 国产精品久久久久久婷婷天堂 | 成人亚洲精品久久久久软件 | 成人一区二区在线 | 久久国产精品-国产精品 | 国产免费又色又爽又黄在线观看 | 黑人巨大精品欧美一区二区一视频 | 亚洲一区二区在线免费观看 | 精品国产乱码久久久久久丨区2区 | 成人免费在线小视频 | 久久亚洲一区二区 | 日日爽 |