Redis持久化RDB
1. 什么是redis的持久化?
Redis 是一款內(nèi)存數(shù)據(jù)庫(kù),也就是說(shuō)它把數(shù)據(jù)都存儲(chǔ)在內(nèi)存中,持久化就是把內(nèi)存中的數(shù)據(jù)存儲(chǔ)到電腦的磁盤上。
Redis 提供了不同級(jí)別的持久化方式:
? ? ? ? 1. RDB 持久化方式能夠在指定的時(shí)間間隔能對(duì)你的數(shù)據(jù)進(jìn)行快照存儲(chǔ)。
? ? ? ? 2. AOF 持久化方式記錄每次對(duì)服務(wù)器寫的操作,當(dāng)服務(wù)器重啟的時(shí)候會(huì)重新執(zhí)行這些命令來(lái)恢復(fù)原始的數(shù)據(jù)。
本篇介紹第一種:RDB。
2. RDB(Redis DataBase)
2.1 RDB是什么?
RDB 是 Redis 持久化到磁盤上的數(shù)據(jù)文件的格式,重點(diǎn)內(nèi)容默認(rèn)的文件名是 dump.rdb。
Redis 會(huì)在指定的時(shí)間間隔內(nèi)將內(nèi)存中的數(shù)據(jù)集快照寫入磁盤,也就是行話講的Snapshot快照,它恢復(fù)時(shí)是將快照文件直接讀到內(nèi)存里。
Redis會(huì)單獨(dú)創(chuàng)建(fork)一個(gè)子進(jìn)程來(lái)進(jìn)行持久化,會(huì)先將數(shù)據(jù)寫入到一個(gè)臨時(shí)文件中,待持久化過(guò)程都結(jié)束了,再用這個(gè)臨時(shí)文件替換上次持久化好的文件。
整個(gè)過(guò)程中,主進(jìn)程是不進(jìn)行任何IO操作的,這就確保了極高的性能。如果需要進(jìn)行大規(guī)模數(shù)據(jù)的恢復(fù),且對(duì)于數(shù)據(jù)恢復(fù)的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺點(diǎn)是最后一次持久化后的數(shù)據(jù)可能丟失。
2.2 Fork的作用是什么?
fork的作用是復(fù)制一個(gè)與當(dāng)前進(jìn)程一樣的進(jìn)程。新進(jìn)程的所有數(shù)據(jù)(變量、環(huán)境變量、程序計(jì)數(shù)器等)。
數(shù)值都和原進(jìn)程一致,但是是一個(gè)全新的進(jìn)程,并作為原進(jìn)程的子進(jìn)程。
2.3 如何手動(dòng)將 redis 中的數(shù)據(jù)寫入磁盤?
使用 save 命令,或者 bgsave 命令。
- save:該命令會(huì)阻塞其他操作,例:客戶端請(qǐng)求。
- bgsave:該命令會(huì)在后臺(tái)異步執(zhí)行寫操作,仍然可以處理客戶端請(qǐng)求。
- lastsave:該命令獲取最后一次成功執(zhí)行快照的時(shí)間。
- flushall / flushdb:清庫(kù)命令,也會(huì)刷新 dump.rdb。
2.4 如何從RDB文件中加載數(shù)據(jù)?
Redis 在啟動(dòng)的時(shí)候會(huì)自動(dòng)加載 redis-server 所在的目錄下的 dump.rdb 文件(如果存在的話),如果在啟動(dòng) redis-server 服務(wù)的時(shí)候指定了別的配置文件,那就讀取那個(gè)指定的配置文件目錄下的 dump.rdb,例:
redis-server /myconf/redis.conf 命令執(zhí)行之后就會(huì)去加載 /myconf 目錄下的 dump.rdb 文件來(lái)初始化 redis。
so,我們的運(yùn)維人員就可以通過(guò)定期備份 dump.rdb 文件的方式來(lái)防止數(shù)據(jù)的丟失。
2.5 RDB 的優(yōu)勢(shì)
- 適合大規(guī)模的數(shù)據(jù)恢復(fù)。
2.6 RDB 的劣勢(shì)
-
在一定間隔時(shí)間做一次備份,所以如果redis意外down掉的話,就?
會(huì)丟失最后一次快照后的所有修改。 -
fork的時(shí)候,內(nèi)存中的數(shù)據(jù)被克隆了一份,大致2倍的膨脹性需要慎重考慮。
2.7 如何令 redis 停止寫 RDB 文件??
-
在配置文件中配置?save ""
-
在客戶端執(zhí)行命令:redis-cli config set save ""
2.8 總結(jié)
?
?
?
總結(jié)
以上是生活随笔為你收集整理的Redis持久化RDB的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt:Qt实现网页自动刷新工具
- 下一篇: VC++动态库封装及调用