redis数据备份
一、RDB 詳解
RDB 是 Redis 默認的持久化方案。 就是在配置文件里面設置多久時間之內,執行了多少次寫操作, 就生成一份數據快照dump.rdb文件,備份到指定是目錄下。redis.conf 文件:
以上就是900秒內寫操作執行了1次 300秒/10次 60秒/10000次都會進行數據備份。
觸發RDB快照:
1 在指定的時間間隔內,執行指定次數的寫操作(根據配置文件中設置的來執行) 2、執行save(阻塞, 只管保存快照,其他的等待) 或者是bgsave (異步)命令 3、執行flushall 命令,清空數據庫所有數據。 4、執行shutdown 命令,保證服務器正常關閉且不丟失任何數據通過RDB文件恢復數據
將dump.rdb 文件拷貝到redis的安裝目錄的bin目錄下,重啟redis服務即可。 在實際開發中,一般會考慮到物理機硬盤損壞情況,選擇備份dump.rdb 。RDB 的優缺點
優點是只包含一個文件,這樣非常方便進行備份。缺點就是無法實現實時性,因為rdb是有時間間隔的,這個間隔期間出現問題了,數據就沒有備份到。 如果數據量過大,fork一個子進程進行備份的時候,會很耗時。二、AOF 詳解
Redis 默認不開啟。它的出現是為了彌補RDB的不足(數據的不一致性), 所以它采用日志的形式來記錄每個寫操作,并追加到文件中。Redis 重啟的會根據日志文件的內容將寫指令從前到后執行一次以完成數據的恢復工作。從配置文件了解AOF
打開 redis.conf 文件,找到 APPEND ONLY MODE 對應內容
1、 redis 默認關閉,開啟需要手動把no改為yes
appendonly yes2、指定本地數據庫文件名,默認值為 appendonly.aof
appendfilename "appendonly.aof"3、指定更新日志條件
#appendfsync always #appendfsync everysec #appendfsync noalways:同步持久化,每次發生數據變化會立刻寫入到磁盤中。性能較差當數據完整性比較好(慢,安全)。everysec:出廠默認推薦,每秒異步記錄一次(默認值)no:不同步4 、配置重寫觸發機制
auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb當AOF文件大小是上次rewrite后大小的一倍且文件大于64M時觸發備份。 一般都設置為3G,64M太小了。根據AOF文件恢復數據正常情況下,將appendonly.aof 文件拷貝到redis的安裝目錄的bin目錄下, 重啟redis服務即可。AOF的重寫機制
AOF的工作原理是將寫操作追加到文件中,文件的冗余內容會越來越多。 當AOF文件的大小超過所設定的閾值時,Redis就會對AOF文件的內容壓縮。重寫的原理:
Redis 會fork出一條新進程,讀取內存中的數據,并重新寫到一個臨時文件中。 并沒有讀取舊文件(你都那么大了,我還去讀你???)。最后替換舊的aof文件。 這個新文件里面會優化語句,比如多條合并成一條指令,達到瘦身的目的。AOF 的優缺點
優點:數據的完整性和一致性更高 缺點:因為AOF記錄的內容多,文件會越來越大,數據恢復也會越來越慢。三、總結:
Redis 默認開啟RDB持久化方式,在指定的時間間隔內,執行指定次數的寫操作,則將內存中的數據寫入到磁盤中。RDB 持久化適合大規模的數據恢復但它的數據一致性和完整性較差。Redis 需要手動開啟AOF持久化方式,默認是每秒將寫操作日志追加到AOF文件中。AOF 的數據完整性比RDB高,但記錄內容多了,會影響數據恢復的效率。Redis 針對 AOF文件大的問題,提供重寫的瘦身機制。若只打算用Redis 做緩存,可以關閉持久化。若打算使用Redis 的持久化。建議RDB和AOF都開啟。其實RDB更適合做數據的備份,留一后手。AOF出問題了,還有RDB。總結
- 上一篇: Vue 图片压缩并上传至服务器
- 下一篇: java 队列已满_JAVA中常见的阻塞