日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

今天分享的內(nèi)容是:redis 如何實(shí)現(xiàn)持久化。

一、什么是持久化 

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

 

二、持久化方式 

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

1. RDB

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

2. AOF

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

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

圖片

 

三、RDB原理 

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

1. 觸發(fā)持久化

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

2. 生成 RDB文件

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

3. 完成持久化

當(dāng)子進(jìn)程完成 RDB 文件的生成后,Redis會(huì)將原來(lái)的RDB文件替換成新生成的RDB文件,從而完成持久化操作。在這個(gè)過(guò)程中,Redis會(huì)阻塞所有寫(xiě)操作,確保RDB文件的一致性。

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

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

 

RDB文件格式

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

  1. RDB文件頭部:包含"REDIS"字樣的字符串,以及版本號(hào)等信息。

  2. 保存鍵值對(duì)數(shù)據(jù):鍵值對(duì)數(shù)據(jù)以"SELECTDB"命令開(kāi)頭,后面跟著一個(gè)4字節(jié)的整數(shù),表示數(shù)據(jù)庫(kù)編號(hào)。然后是若干個(gè)鍵值對(duì)數(shù)據(jù),每個(gè)鍵值對(duì)包含3部分:鍵的長(zhǎng)度、鍵的內(nèi)容、值的內(nèi)容。

  3. 保存過(guò)期時(shí)間:RDB文件還可以保存鍵值對(duì)的過(guò)期時(shí)間,以便在Redis重啟時(shí)自動(dòng)刪除過(guò)期的鍵值對(duì)。過(guò)期時(shí)間以"EXPIRETIME_MS"命令開(kāi)頭,后面跟著鍵和過(guò)期時(shí)間等信息。

  4. RDB文件尾部:包含一個(gè)8字節(jié)的校驗(yàn)和,用于檢測(cè)RDB文件是否被修改。

以下是一個(gè)簡(jiǎn)單的 RDB文件示例:

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

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

 

四、AOF 原理 

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

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

1. AOF持久化策略

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

  • always:每次執(zhí)行寫(xiě)命令時(shí)都會(huì)將命令追加到AOF文件中。

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

  • no:不進(jìn)行AOF持久化操作。

     

2. AOF文件格式

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

3. AOF重寫(xiě)

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

4. 完成持久化

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

AOF 文件格式

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

  • $3rnSETrn$5rnmykeyrn$7rnmyvaluern

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

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

 

五、優(yōu)缺點(diǎn) 

1. RDB 優(yōu)缺點(diǎn)

優(yōu)點(diǎn):對(duì)于數(shù)據(jù)的備份和恢復(fù)非常快速,因?yàn)樗傻氖且粋€(gè)快照文件,不需要對(duì)每一條數(shù)據(jù)進(jìn)行操作。

缺點(diǎn):如果 Redis 意外宕機(jī),可能會(huì)丟失最近一次快照時(shí)間點(diǎn)之后的數(shù)據(jù)。

2. AOF 優(yōu)缺點(diǎn)

優(yōu)點(diǎn):能夠保證數(shù)據(jù)的完整性,即使 Redis 意外宕機(jī),也可以通過(guò) AOF 文件來(lái)恢復(fù)數(shù)據(jù)。

缺點(diǎn):每一次寫(xiě)操作都需要進(jìn)行記錄,AOF文件會(huì)變得非常大,而且 AOF 重寫(xiě)操作會(huì)占用大量 CPU 和內(nèi)存資源。

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

  1. AOF重寫(xiě):Redis會(huì)在后臺(tái)啟動(dòng)一個(gè)進(jìn)程,重寫(xiě) AOF文件,將其中的無(wú)效命令刪除,從而縮小AOF文件的大小。

  2. AOF 和 RDB同時(shí)開(kāi)啟:Redis同時(shí)使用 AOF 和 RDB 兩種方式進(jìn)行持久化,當(dāng)Redis重啟時(shí),優(yōu)先使用 AOF 文件來(lái)恢復(fù)數(shù)據(jù),如果 AOF 文件不存在或者損壞,則使用 RDB文件來(lái)恢復(fù)數(shù)據(jù)。

     

六、AOF 重寫(xiě)機(jī)制 

AOF重寫(xiě)機(jī)制是Redis用來(lái)解決AOF文件過(guò)大問(wèn)題的一種機(jī)制。當(dāng)AOF文件過(guò)大時(shí),可以通過(guò) AOF 重寫(xiě)機(jī)制來(lái)生成一個(gè)新的、緊湊的 AOF 文件,以減小 AOF 文件的大小,提高Redis的性能。

AOF重寫(xiě)機(jī)制的實(shí)現(xiàn)原理如下:

1. 觸發(fā)AOF重寫(xiě)

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

2. 執(zhí)行AOF重寫(xiě)

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

3. 完成AOF重寫(xiě)

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

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

分享到:
標(biāo)簽:Redis
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定