Redis 是內存數據庫,如果不能將內存中的數據保存到磁盤中,那么一旦服務器進程退出,服務器的數據庫數據也會消失,所以Redis提供了持久化的功能,redis分為兩種持久化方式:RDB和AOF。有以下幾個特點:
1.RDB持久化方式能夠在指定的時間間隔能對你的數據進行快照存儲。
2.AOF持久化方式記錄每次對服務器寫的操作,當服務器重啟的時候會重新執行這些命令來恢復原始的數據,AOF命令以redis協議追加保存每次寫的操作到文件末尾。Redis還能對AOF文件后臺重寫,使得AOF文件的體積不至于過大。
3.如果你只希望你的數據在服務器運行的時候存在,你也可以不使用任何持久化的方式。
4.你也可以同時開啟兩種持久化方式,在這種情況下,當redis重啟的時候會優先載入AOF文件來恢復原始的數據。因為在通常情況下AOF文件保存的數據集要比RDB文件保存的數據集要完整。
1、概念
在指定的時間間隔內將內存中的數據集快照寫入磁盤中,它恢復的時候是將快照中的文件直接讀取到內存中。
2、持久化機制-BGSAVE
通常,會立即返回ok,Redis進程會執行fork操作創建子進程,Redis在fork時,父進程會繼續為客戶端提供服務,子進程會將數據持久化到硬盤上,然后退出。如果已經在后臺執行保存或者正在運行另一個非后臺保存的進程,特別是正在進行AOF寫入時,則會返回錯誤。如果使用了bgsave任務,而正在進行AOF寫入時,該命令將立即返回ok,并計劃在下一次機會運行后臺保存。阻塞只會在fork階段。
客戶端可以使用lastsave命令檢查操作是否成功。
3、持久化機制-SAVE
不會接受客戶端執行的操作命令,等持久化工作完成之后,會將新的文件替換舊的文件。
4、持久化機制-自動觸發
在redis.conf
中可以配置,讓用戶自定義save
屬性,讓服務器每一段時間內執行一次bgsave
操作。
# 服務器在900秒內,對數據庫進行了至少1次修改 save 900 1 # 服務器在300秒內,對數據庫進行了至少10次修改 save 300 10 # 服務器在60秒內,對數據庫進行了至少10000次修改 save 60 10000 # bgsave發生錯誤時是否停止寫入,一般為yes stop-writes-on-bgsave-error yes # 持久化時是否使用LZF壓縮字符串對象? rdbcompression yes # 是否對rdb文件進行校驗和檢驗,通常為yes rdbchecksum yes # RDB持久化文件名 dbfilename dump.rdb # 持久化文件存儲目錄 dir ./
5、恢復數據機制
只需要將rdb文件放在我們redis啟動目錄就可以了,redis啟動的時候會自動檢查文件并恢復其中的數據。
6、優點
7、缺點
1、概念
以日志的形式來記錄每個寫操作,將Redis執行過的所有指令記錄下來(讀操作不記錄),只許追加文件但不可以改寫文件,Redis啟動之初會讀取該文件重新構建數據,換言之,Redis重啟的話就會根據日志文件的內容將寫的指令從前到后執行一次以完成數據的恢復工作。
2、持久化原理
所有操作的命令會追加在文件中。
3、開啟AOF持久化
# 開啟aof持久化方式,默認no appendonly no # aof 持久化生成的文件名稱 appendfilename "appendonly.aof" # 三種持久化機制 # appendfsync always appendfsync everysec # appendfsync no
4、三種觸發持久化機制
同步持久化,每次發生數據變更會被立即持久化到硬盤中,性能比較差,但是數據完整性好。
異步操作,每秒持久化數據到硬盤一次,可能會丟失一秒的數據。
從不持久化到硬盤。
5、AOF文件損壞
如果 aof 文件被破壞,redis服務是啟動不了的。redis本身提供了修復了工具。redis-check-aof --fix appendonly.aof
5、優點
6、缺點
4、如何選擇持久化機制
開啟兩種持久化方式,根據自己的業務需求針對redis進行配置的調整。
到此這篇關于Redis持久化深入詳解的文章就介紹到這了,更多相關Redis持久化內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!
上一篇:Redis數組和鏈表深入詳解