Redis第七期:redis持久化的兩種實現方式


title: Redis第七期:redis持久化的兩種實現方式
date: 2019-03-31
tags: java

Redis第七期:redis持久化的兩種實現方式

首先,什麼是持久化,什麼是redis的持久化
持久化可以理解爲存儲,就是將數據存儲到一個不會丟失的地方,如果把數據放在內存中,電腦關閉或重啓數據就會丟失,所以放在內存中的數據不是持久化的,而放在磁盤就算是一種持久化。

Redis的數據存儲在內存中,內存是瞬時的,如果linux宕機或重啓,又或者Redis崩潰或重啓,所有的內存數據都會丟失,爲解決這個問題,Redis提供兩種機制對數據進行持久化存儲,便於發生故障後能迅速恢復數據。

redis提供兩種持久化方式

1.RDB方式
Redis Database(RDB),就是在指定的時間間隔內將內存中的數據集快照寫入磁盤,數據恢復時將快照文件直接再讀到內存。
RDB方式的數據持久化,僅需在redis.conf文件中配置即可
配置文件redis.conf中搜索 SNAPSHOTTING
在這裏插入圖片描述
其中配置格式:
save 900 1
save 300 10
save 60 10000
示例表示在900秒內發生1次改變就保存數據,類似如此
那麼保存數據在哪
dbfilename:設置RDB的文件名,默認文件名爲dump.rdb
dir:指定RDB和AOF文件的目錄
以上這些都可以自定義配置
在這裏插入圖片描述
容易發現其實redis默認開啓RDB持久化的
通過查找該文件名可以證明
在這裏插入圖片描述
通過查找可以發現存在該文件,說明之前的操作都是RDB持久化了的,並在這個文件裏被記錄

RDB持久化方式的優缺點
優點:由於存儲的是數據快照文件,恢復數據很方便,也比較快
缺點:會丟失最後一次快照以後更改的數據

如果你的應用能容忍一定數據的丟失,那麼使用rdb是不錯的選擇
如果你不能容忍一定數據的丟失,使用rdb就不是一個很好的選擇

由於需要經常操作磁盤,RDB 會經常 fork 出一個子進程。如果你的redis數據庫很大的話,Fork 佔用比較多的時間,並且可能會影響 Redis 暫停服務一段時間(millisecond 級別),如果你的數據庫超級大並且你的服務器CPU比較弱,有可能是會達到一秒。

2.第二種持久化方式
AOF方式
什麼是AOF方式
Append-only File(AOF),Redis每次接收到一條改變數據的命令時,它將把該命令寫到一個AOF文件中(只記錄寫操作,讀操作不記錄),當Redis重啓時,它通過執行AOF文件中所有的命令來恢復數據。
AOF方式的數據持久化,僅需在redis.conf文件中配置即可
在redis.conf配置文件中搜索APPEND ONLY MODE
在這裏插入圖片描述>把appendonly 改爲yes保存開啓AOF持久化
在這裏插入圖片描述
redis服務指定新配置開啓
先殺死服務進程
在這裏插入圖片描述
以新配置開啓redis服務
在這裏插入圖片描述>在命令行終端寫一些測試命令
在這裏插入圖片描述>退出回到src目錄下查找aof文件
在這裏插入圖片描述
可以看見生成了持久化記錄文件
打開查看內容
在這裏插入圖片描述
可見記錄文件
選擇0號庫,flushall清空所有,接着set k1 v1 ,set k2 v2
aof文件只會記錄寫操作,不會記錄讀操作

關於一些其配置
appendfilename:指定AOF文件名,默認文件名爲appendonly.aof
appendfsync:配置向aof文件寫命令數據的策略
auto-aof-rewrite-percentage:當目前aof文件大小超過上一次重寫時的aof文件大小的百分之多少時會再次進行重寫,如果之前沒有重寫,則以啓動時的aof文件大小爲依據
auto-aof-rewrite-min-size:允許重寫的最小AOF文件大小

其中執行策略有
no:不主動進行同步操作,而是完全交由操作系統來做(即每30秒一次),比較快但不是很安全
always:每次執行寫入都會執行同步,慢一些但是比較安全
everysec:每秒執行一次同步操作,比較平衡,介於速度和安全之間

總結
append-only 文件是另一個可以提供完全數據保障的方案;
AOF 文件會在操作過程中變得越來越大。比如,如果你做一百次加法計算,最後你只會在數據庫裏面得到最終的數值,但是在你的 AOF 裏面會存在 100 次記錄,其中 99 條記錄對最終的結果是無用的;
但 Redis 支持在不影響服務的前提下在後臺重構 AOF 文件,讓文件得以整理變小;
可以同時使用這兩種方式,redis默認優先加載aof文件;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章