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

Redis 為什么要采用 RDB 和 AOF兩種持久化方式?

數(shù)據(jù)庫 Redis
這篇文章,我們來分享 Redis 是如何實現(xiàn)持久化以及Redis 為什么要采用 RDB 和 AOF兩種持久化方式。

這篇文章,我們來分享 Redis是如何實現(xiàn)持久化以及Redis 為什么要采用 RDB 和 AOF兩種持久化方式。

一、什么是持久化?

持久化,Persistence,把數(shù)據(jù)(如內(nèi)存中的對象)保存到可永久保存的存儲設(shè)備中(如磁盤)。這樣可以保證程序在服務(wù)器宕機后,重新啟動不會丟失數(shù)據(jù)。

二、持久化方式

Redis 的持久化方式有兩種:RDB 和 AOF。

1. RDB

RDB:Redis DataBase,它是將 Redis 在內(nèi)存中的數(shù)據(jù)定期或者在指定時間間隔內(nèi)快照到磁盤上,生成一個RDB文件,該文件包含了Redis在某個時間點上的數(shù)據(jù)快照。當(dāng) Redis 重新啟動時,可以通過加載 RDB 文件來恢復(fù)數(shù)據(jù)。

2. AOF

AOF:Append Only File,它是將 Redis 執(zhí)行的每一條寫命令追加到 AOF 文件的末尾,每次 Redis 啟動時重新執(zhí)行 AOF 文件中的命令,從而重新構(gòu)建數(shù)據(jù)集。通過這種方式,可以保證 Redis 的數(shù)據(jù)不會丟失,但是對于每一次寫操作都需要進行記錄,AOF文件會變得非常大。

實現(xiàn)原理圖如下:

三、RDB原理

Redis DataBase(RDB)是將 Redis 在內(nèi)存中的數(shù)據(jù)以二進制的形式定期或者在指定時間間隔內(nèi)快照到磁盤上,生成一個 RDB 文件,該文件包含了 Redis 在某個時間點上的數(shù)據(jù)快照。當(dāng) Redis 重新啟動時,可以通過加載 RDB 文件來恢復(fù)數(shù)據(jù)。其原理主要分為如下 3個核心流程:

1. 觸發(fā)持久化

Redis支持兩種觸發(fā)持久化的方式,一種是根據(jù)時間間隔自動觸發(fā)持久化,另一種是手動執(zhí)行 SAVE 或 BGSAVE 命令來觸發(fā)持久化。手動執(zhí)行 BGSAVE 命令可以在 Redis 持續(xù)提供服務(wù)的同時進行持久化操作,而手動執(zhí)行 SAVE 命令會阻塞 Redis 的服務(wù)進程,直到持久化操作完成,所以生產(chǎn)換進慎用 SAVE 指令。

2. 生成 RDB文件

當(dāng) Redis 觸發(fā)持久化操作時,Redis 會 fork 出一個子進程,子進程負責(zé)生成 RDB 文件。在生成 RDB 文件的過程中,Redis 會將內(nèi)存中的數(shù)據(jù)按照一定的格式寫入到 RDB 文件中,包括鍵值對、過期時間、數(shù)據(jù)庫號等信息。

3. 完成持久化

當(dāng)子進程完成 RDB 文件的生成后,Redis會將原來的RDB文件替換成新生成的RDB文件,從而完成持久化操作。在這個過程中,Redis會阻塞所有寫操作,確保RDB文件的一致性。

Redis Server 自動創(chuàng)建 RDB 文件的默認配置在 redis.conf 里,內(nèi)容如下:

save 900 1 # 服務(wù)器在900s(15分鐘)之內(nèi),對數(shù)據(jù)進行了至少1次修改
save 300 10  #服務(wù)器在300s(5分鐘)之內(nèi),對數(shù)據(jù)進行了至少10次修改
save 60 10000 #服務(wù)器在60s(1分鐘)之內(nèi),對數(shù)據(jù)進行了至少10000次修改

4.RDB文件格式

RDB文件格式由多個部分組成,包括:

  • RDB文件頭部:包含"REDIS"字樣的字符串,以及版本號等信息。
  • 保存鍵值對數(shù)據(jù):鍵值對數(shù)據(jù)以"SELECTDB"命令開頭,后面跟著一個4字節(jié)的整數(shù),表示數(shù)據(jù)庫編號。然后是若干個鍵值對數(shù)據(jù),每個鍵值對包含3部分:鍵的長度、鍵的內(nèi)容、值的內(nèi)容。
  • 保存過期時間:RDB文件還可以保存鍵值對的過期時間,以便在Redis重啟時自動刪除過期的鍵值對。過期時間以"EXPIRETIME_MS"命令開頭,后面跟著鍵和過期時間等信息。
  • RDB文件尾部:包含一個8字節(jié)的校驗和,用于檢測RDB文件是否被修改。

以下是一個簡單的 RDB文件示例:

REDIS0006   // RDB文件頭部
SELECTDB 0  // 選擇數(shù)據(jù)庫0
$3foo$3bar  // 鍵為"foo",值為"bar"
$3abc$5hello  // 鍵為"abc",值為"hello"
EXPIRETIME_MS $3foo$4     // 設(shè)置鍵"foo"的過期時間為4秒
00000000    // RDB文件尾部的校驗和

在讀取RDB文件時,Redis會按照上述格式逐個解析RDB文件的每個部分,并將數(shù)據(jù)加載到內(nèi)存中。如果Redis在重啟時檢測到了存在RDB文件,它將讀取RDB文件,并將其中的數(shù)據(jù)加載到內(nèi)存中,以便快速恢復(fù)數(shù)據(jù)。

四、AOF 原理

Append Only File(AOF),將 Redis 執(zhí)行的每一條寫命令追加到 AOF 文件的末尾,每次Redis啟動時重新執(zhí)行 AOF 文件中的命令,從而重新構(gòu)建數(shù)據(jù)集。通過這種方式,可以保證 Redis 的數(shù)據(jù)不會丟失。

AOF 實現(xiàn)原理核心流程如下:

1. AOF持久化策略

Redis 支持三種 AOF 持久化策略:

  • always:每次執(zhí)行寫命令時都會將命令追加到AOF文件中。
  • everysec:每秒執(zhí)行一次AOF持久化操作,將一秒鐘內(nèi)執(zhí)行的寫命令追加到AOF文件中。
  • no:不進行AOF持久化操作。

2. AOF文件格式

AOF文件的格式是一系列Redis命令的序列化形式,Redis將寫入AOF文件的命令轉(zhuǎn)換為一系列字符串,并添加到AOF文件的末尾。這些命令包括SET、DEL、INCR等操作,但是對于讀命令,如GET、HGET等操作,Redis不會將其寫入AOF文件。

3. AOF重寫

AOF重寫是為了解決 AOF 文件過大的問題,它會根據(jù)當(dāng)前內(nèi)存中的數(shù)據(jù)重建一個新的 AOF文件,并用新文件替換舊文件。在重寫過程中,Redis會將一段時間內(nèi)的寫命令重寫為一條SET命令或者DEL命令,從而減小AOF文件的大小。重寫過程中,Redis會使用內(nèi)存中的數(shù)據(jù)來生成新的AOF文件,并在生成過程中暫停所有寫操作。

4. 完成持久化

當(dāng)Redis觸發(fā)AOF持久化操作時,Redis會將內(nèi)存中的寫命令追加到AOF文件的末尾,然后通過fsync系統(tǒng)調(diào)用將寫入的內(nèi)容強制寫入磁盤,確保數(shù)據(jù)的安全性。

AOF文件的格式非常簡單,它是一個文本文件,每行都記錄了一條Redis命令。每條命令都以"$"開頭,表示命令長度,接著是命令的具體內(nèi)容,以"\r\n"結(jié)尾。例如,以下是一條SET命令的AOF格式:

$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nmyvalue\r\n

其中,"表示命令的長度為,表示換行符,5\r\n"表示key的長度為5,"mykey"是key的具體內(nèi)容,"\r\n"表示換行符,"$7\r\n"表示value的長度為7,"myvalue"是value的具體內(nèi)容,"\r\n"表示換行符。

在AOF文件中,除了記錄命令外,還有一些特殊的標(biāo)記,如"*\r\n"表示一次多個命令的操作,"$-1\r\n"表示空值,":0\r\n"表示數(shù)字0等。

五、優(yōu)缺點

1. RDB 優(yōu)缺點

  • 優(yōu)點:對于數(shù)據(jù)的備份和恢復(fù)非常快速,因為它生成的是一個快照文件,不需要對每一條數(shù)據(jù)進行操作。
  • 缺點:如果 Redis 意外宕機,可能會丟失最近一次快照時間點之后的數(shù)據(jù)。

2. AOF 優(yōu)缺點

  • 優(yōu)點:能夠保證數(shù)據(jù)的完整性,即使 Redis 意外宕機,也可以通過 AOF 文件來恢復(fù)數(shù)據(jù)。
  • 缺點:每一次寫操作都需要進行記錄,AOF文件會變得非常大,而且 AOF 重寫操作會占用大量 CPU 和內(nèi)存資源。

為了兼顧兩種方式的優(yōu)缺點,Redis提供了兩種混合持久化方式:

  • AOF重寫:Redis會在后臺啟動一個進程,重寫 AOF文件,將其中的無效命令刪除,從而縮小AOF文件的大小。
  • AOF 和 RDB同時開啟:Redis同時使用 AOF 和 RDB 兩種方式進行持久化,當(dāng)Redis重啟時,優(yōu)先使用 AOF 文件來恢復(fù)數(shù)據(jù),如果 AOF 文件不存在或者損壞,則使用 RDB文件來恢復(fù)數(shù)據(jù)。

六、AOF 重寫機制

AOF重寫機制是Redis用來解決AOF文件過大問題的一種機制。當(dāng)AOF文件過大時,可以通過 AOF 重寫機制來生成一個新的、緊湊的 AOF 文件,以減小 AOF 文件的大小,提高Redis的性能。

AOF重寫機制的實現(xiàn)原理總結(jié)為下面 3步:

1. 觸發(fā)AOF重寫

Redis會周期性地檢查 AOF 文件的大小,如果超過了設(shè)定的閾值,就會觸發(fā) AOF 重寫操作。在默認情況下,當(dāng) AOF 文件大小超過64MB時,Redis會自動觸發(fā) AOF 重寫操作。如果需要修改閾值,可以通過配置文件中的"auto-aof-rewrite-percentage"和"auto-aof-rewrite-min-size"參數(shù)來修改。

2. 執(zhí)行AOF重寫

AOF重寫操作是在一個子進程中執(zhí)行的,它會遍歷內(nèi)存中的數(shù)據(jù)結(jié)構(gòu),將一段時間內(nèi)的寫命令重寫為一條SET命令或者 DEL命令,并寫入新的 AOF 文件。在重寫過程中,Redis會將新的AOF文件和舊的AOF文件進行比較,如果發(fā)現(xiàn)有相同的命令序列,就會將新的AOF文件中的命令序列替換為舊的AOF文件中的命令序列,以減小新AOF文件的大小。

3. 完成AOF重寫

AOF重寫操作完成后,Redis會將新的AOF文件替換舊的AOF文件,并通過fsync系統(tǒng)調(diào)用將寫入的內(nèi)容強制寫入磁盤,以確保數(shù)據(jù)的安全性。

AOF重寫機制的優(yōu)點是可以減小AOF文件的大小,提高Redis的性能,缺點是重寫操作會占用大量CPU和內(nèi)存資源,如果數(shù)據(jù)量較大,可能會導(dǎo)致Redis的性能下降。

責(zé)任編輯:趙寧寧 來源: 猿java
相關(guān)推薦

2020-01-06 14:54:31

RDBAOFRedis

2025-05-12 08:30:00

RedisRDBAOF

2023-05-11 09:12:35

RedisRDB日志

2023-09-12 10:49:44

Redis數(shù)據(jù)庫

2021-07-18 07:59:42

RedisRDBAOF

2019-05-17 08:55:49

RedisRDBAOF

2021-02-04 08:01:35

RedisRDBAOF

2020-12-11 11:40:37

RDBAOFRedis

2021-03-10 00:02:01

Redis

2024-03-26 00:03:08

Redis數(shù)據(jù)RDB

2024-09-12 08:49:53

2012-03-07 09:18:06

Redis

2021-10-18 07:43:30

RedisAOF日志RDB快照

2024-09-06 17:49:46

2020-02-18 16:14:33

RedisRDBAOF

2023-03-13 08:08:48

數(shù)據(jù)庫Redis

2024-05-27 09:07:27

2023-07-07 08:16:53

Redis持久化

2018-06-12 09:33:45

Redis高可用AOF

2019-11-18 16:20:48

RedisRDB數(shù)據(jù)庫
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 91麻豆精品国产91久久久久久 | 亚洲最大福利网 | 欧美成人在线网站 | 日韩一二三区视频 | 久久久亚洲成人 | 91精品国产一区二区三区蜜臀 | 日本欧美在线视频 | 国产精品亚洲片在线播放 | 女人毛片a毛片久久人人 | 精品亚洲一区二区三区四区五区 | 91精品国产高清一区二区三区 | 久久久久久亚洲精品 | 国产精品久久久久久久久久久免费看 | 亚洲精品免费视频 | 亚洲电影在线播放 | 二区中文 | 国产精品国产精品国产专区不卡 | 天天色图 | 99免费精品视频 | 久久男人 | 91资源在线 | 麻豆av在线 | 视频一区欧美 | 一区二区日本 | 亚洲欧美日韩电影 | 99精品一级欧美片免费播放 | 久久久久久免费免费 | 欧美一区二区在线视频 | 国产精品毛片一区二区三区 | 青青草社区 | 综合激情久久 | 日韩一二区在线观看 | 亚洲精品久久久久久国产精华液 | 精品中文字幕在线观看 | 国产精品99久久久久久动医院 | 狠狠av| 黑人精品| 亚洲三区在线观看 | 国产精品日韩欧美 | 亚洲免费婷婷 | 国产91久久久久久久免费 |