redis的持久化:RDB的配置


RDB 詳解

RDB持久化方式是指在指定時間間隔內將內存中的數據集快照寫入磁盤,也就是Snapshot快照,它恢復時是將快照文件直接讀到內存中,Redis會單獨創建(fork)一個子進程來進行持久化,會先將數據寫入到一個臨時文件中,等到持久化過程結束,再用這個臨時文件替換上次持久化好的文件,整個過程中,主進程是不進行任何IO操作的,這就確保了極高的性能,如果需要進行大規模數據的恢復,且對於數據恢復的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效,RDB的缺點是最后一次的數據可能會丟失

從配置文件了解RDB

打開 redis.conf 文件,找到 SNAPSHOTTING 對應內容
1 RDB核心規則配置(重點)

save 900 1
save 300 10
save 60 10000

那么只要滿足以下三個條件中的任意一個,BGSAVE命令就會被執行
服務器在900秒之內,對數據庫進行了至少1次修改
服務器在300秒之內,對數據庫進行了至少10次修改                                              

服務器在60秒之內,對數據庫進行了至少10000次修改。

2 指定本地數據庫文件名,一般采用默認的 dump.rdb

3 指定本地數據庫存放目錄,一般也用默認配置

 

4 默認開啟數據壓縮


################################ 快照  #################################  
#  
# Save the DB on disk:保存數據庫到磁盤  
#  
#   save <秒> <更新>  
#  
#   如果指定的秒數和數據庫寫操作次數都滿足了就將數據庫保存。  
#  
#   下面是保存操作的實例:  
#   900秒(15分鍾)內至少1個key值改變(則進行數據庫保存--持久化)  
#   300秒(5分鍾)內至少10個key值改變(則進行數據庫保存--持久化)  
#   60秒(1分鍾)內至少10000個key值改變(則進行數據庫保存--持久化)  
#  
#   注釋:注釋掉“save”這一行配置項就可以讓保存數據庫功能失效。  
#  
#   你也可以通過增加一個只有一個空字符串的配置項(如下面的實例)來去掉前面的“save”配置。  
#  
#   save ""  
  
save 900 1  
save 300 10  
save 60 10000  
  
#在默認情況下,如果RDB快照持久化操作被激活(至少一個條件被激活)並且持久化操作失敗,Redis則會停止接受更新操作。  
#這樣會讓用戶了解到數據沒有被正確的存儲到磁盤上。否則沒人會注意到這個問題,可能會造成災難。  
#  
#如果后台存儲(持久化)操作進程再次工作,Redis會自動允許更新操作。  
#  
#然而,如果你已經恰當的配置了對Redis服務器的監視和備份,你也許想關掉這項功能。  
#如此一來即使后台保存操作出錯,redis也仍然可以繼續像平常一樣工作。  
stop-writes-on-bgsave-error yes  
  
#是否在導出.rdb數據庫文件的時候采用LZF壓縮字符串和對象?  
#默認情況下總是設置成‘yes’, 他看起來是一把雙刃劍。  
#如果你想在存儲的子進程中節省一些CPU就設置成'no',  
#但是這樣如果你的kye/value是可壓縮的,你的到處數據接就會很大。  
rdbcompression yes  
  
#從版本RDB版本5開始,一個CRC64的校驗就被放在了文件末尾。  
#這會讓格式更加耐攻擊,但是當存儲或者加載rbd文件的時候會有一個10%左右的性能下降,  
#所以,為了達到性能的最大化,你可以關掉這個配置項。  
#  
#沒有校驗的RDB文件會有一個0校驗位,來告訴加載代碼跳過校驗檢查。  
rdbchecksum yes  
  
# 導出數據庫的文件名稱  
dbfilename dump.rdb  
  
# 工作目錄  
#  
# 導出的數據庫會被寫入這個目錄,文件名就是上面'dbfilename'配置項指定的文件名。  
#   
# 只增的文件也會在這個目錄創建(這句話沒看明白)  
#   
# 注意你一定要在這個配置一個工作目錄,而不是文件名稱。  
dir ./  

手動執行RDB備份

save:

127.0.0.1:6379> set user n1
OK
127.0.0.1:6379> save
OK
127.0.0.1:6379>

bgsave:

[root@iZbp143t3oxhfc3ar7jey0Z redis-4.0.12]# redis-cli
127.0.0.1:6379> save
OK
127.0.0.1:6379> set addr bj
OK
127.0.0.1:6379> BGSAVE
Background saving started

 

 

注意: bgsave命令是針對save阻塞問題做的優化。 Redis內部所有涉及到RDB操作都采用bgsave的方式, save命令可以放棄使用

觸發RDB快照

1 在指定的時間間隔內,執行指定次數的寫操作
2 執行save(阻塞, 只管保存快照,其他的等待) 或者是bgsave (異步)命令
3 執行flushall 命令,清空數據庫所有數據,意義不大。
4 執行shutdown 命令,保證服務器正常關閉且不丟失任何數據,意義...也不大。

通過RDB文件恢復數據

將dump.rdb 文件拷貝到redis的安裝目錄的bin目錄下,重啟redis服務即可。在實際開發中,一般會考慮到物理機硬盤損壞情況,選擇備份dump.rdb 。可以從下面的操作演示中可以體會到。

RDB 的優缺點

優點:
1 適合大規模的數據恢復。
2 如果業務對數據完整性和一致性要求不高,RDB是很好的選擇。

缺點:
1 數據的完整性和一致性不高,因為RDB可能在最后一次備份時宕機了。
2 備份時占用內存,因為Redis 在備份時會獨立創建一個子進程,將數據寫入到一個臨時文件(此時內存中的數據是原來的兩倍哦),最后再將臨時文件替換之前的備份文件。
所以Redis 的持久化和數據的恢復要選擇在夜深人靜的時候執行是比較合理的。

操作演示

[root@iZbp143t3oxhfc3ar7jey0Z redis-4.0.12]# redis-server redis.conf
[root@iZbp143t3oxhfc3ar7jey0Z redis-4.0.12]# redis-cli
127.0.0.1:6379> save
OK
127.0.0.1:6379> set addr bj
OK
127.0.0.1:6379> BGSAVE
Background saving started
127.0.0.1:6379> set n1 12
OK
127.0.0.1:6379> set n1 13
OK
127.0.0.1:6379> set n1 15
OK
127.0.0.1:6379> set n2 12
OK
127.0.0.1:6379> set n3 123
OK
127.0.0.1:6379> set 11 ser
OK
127.0.0.1:6379> set 124 werew
OK
127.0.0.1:6379> set we re
OK
127.0.0.1:6379> set 131 eq
OK
127.0.0.1:6379> set 12  sf
OK
127.0.0.1:6379> set rr rr
OK
127.0.0.1:6379> set aa  aa
OK
127.0.0.1:6379> set pp pp
OK
127.0.0.1:6379> set asd pp
OK
127.0.0.1:6379> set ss pp
OK
127.0.0.1:6379>
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM