【小資說庫】第13期 應用程序開發人員、DBA和DBMS開發人員的分工是怎樣的?
750
2025-03-31
Redis 提供了2個不同形式的持久化方式。
RDB Redis DataBase
AOF A ppend Of File
Redis持久化分為RDB持久化和AOF持久化:前者將當前數據保存到硬盤,后者則是將每次執行的寫命令保存到硬盤(類似于MySQL的binlog);由于AOF持久化的實時性更好,即當進程意外退出時丟失的數據更少,因此AOF是目前主流的持久化方式, 不過RDB持久化仍然有其用武之地。
RDB
在指定的時間間隔內將內存中的數據集快照寫入磁盤,也就是行話講的snapshot快照,它恢復是將快照文件直接讀到內存。
RDB持久化是將當前進程中的數據生成快照保存到硬盤(因此也稱作快照持久化),保存的文件后綴是rdb;當Redis重新啟動時,可以讀取快照文件恢復數據。
當前時刻內存中的數據寫到磁盤中。
備份是如何執行的
Redis會單獨創建(fork)一個子進程來進行持久化,會先將數據寫入到 一個臨時文件中,待持久化過程都結束了,再用這個臨時文件替換上次持久化好的文件。 整個過程中,主進程是不進行任何IO操作的,這就確保了極高的性能 如果需要進行大規模數據的恢復,且對于數據恢復的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺點是最后一次持久化后的數據可能丟失。
Fork
的作用是復制一個與當前進程一樣的進程。新進程的所有數據(變量、環境變量、程序計數器等) 數值都和原進程一致,但是是一個全新的進程,并作為原進程的子進程(內存會暫時性的增加一倍)
在Linux程序中,fork()會產生一個和父進程完全相同的子進程,但子進程在此后多會exec系統調用,出于效率考慮,Linux中引入了“寫時復制技術”
l 一般情況父進程和子進程會共用同一段物理內存,只有進程空間的各段的內容要發生變化時,才會將父進程的內容復制一份給子進程。
RDB持久化流程
dump.rdb文件
在redis.conf中配置文件名稱,默認為dump.rdb
配置位置
rdb文件的保存路徑,也可以修改。默認為Redis啟動時命令行所在的目錄下
想要修改的話需要修改,redis.config 中的dir "/myredis/"
如何觸發RDB快照;保持策略
配置文件中默認的快照配置
命令 save VS bgsave
save :save時只管保存,其它不管,全部阻塞。手動保存。不建議。
bgsave:Redis會在后臺異步進行快照操作, 快照同時還可以響應客戶端請求。
可以通過lastsave 命令獲取最后一次成功執行快照的時間
flushall命令
執行flushall命令,也會產生dump.rdb文件,但里面是空的,無意義
SNAPSHOTTING快照的配置項
Save
格式:save 秒鐘 寫操作次數
RDB是整個內存的壓縮過的Snapshot,RDB的數據結構,可以配置復合的快照觸發條件,
默認是1分鐘內改了1萬次,或5分鐘內改了10次,或15分鐘內改了1次。
禁用
不設置save指令,或者給save傳入空字符串
stop-writes-on-bgsave-error
當Redis無法寫入磁盤的話,直接關掉Redis的寫操作。推薦yes.
rdbcompression 壓縮文件
對于存儲到磁盤中的快照,可以設置是否進行壓縮存儲。如果是的話,redis會采用LZF算法進行壓縮。
如果你不想消耗CPU來進行壓縮的話,可以設置為關閉此功能。推薦yes.
rdbchecksum 檢查完整性
在存儲快照后,還可以讓redis使用CRC64算法來進行數據校驗,
但是這樣做會增加大約10%的性能消耗,如果希望獲取到最大的性能提升,可以關閉此功能
推薦yes.
rdb的備份
先通過config get dir 查詢rdb文件的目錄
將*.rdb的文件拷貝到別的地方
rdb的恢復
u 關閉Redis
u 先把備份的文件拷貝到工作目錄下cp dump2.rdb dump.rdb
u 啟動Redis, 備份數據會直接加載
優勢
l 適合大規模的數據恢復
l 對數據完整性和一致性要求不高更適合使用
l 節省磁盤空間
l 恢復速度快
劣勢
Fork的時候,內存中的數據被克隆了一份,大致2倍的膨脹性需要考慮
雖然Redis在fork時使用了寫時拷貝技術,但是如果數據龐大時還是比較消耗性能。
在備份周期在一定間隔時間做一次備份,所以如果Redis意外down掉的話,就會丟失最后一次快照后的所有修改。
如何停止
動態停止RDB:redis-cli config set save ""#save后給空值,表示禁用保存策略
小總結
Redis 任務調度
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。