Redis學習-4-2 Redis持久化
1.持久化:
數據保存到一個不會丟失的地方就是持久化,可認為是永久存儲的;
2.Redis持久化:
Redis的數據存儲在內存中,是不安全的,所以Redis有自己的持久化方案,將內存數據定期保存到磁盤文件中,當Redis崩潰了或者計算機意外關機了,重啟Redis服務的時候,將磁盤中文件恢復到內存中來;
3.Redis持久化方案:
1.RDB:
Redis Data Base,就是在指定的時間間隔內將內存中的數據集快照寫入磁盤,數據恢復時將快照文件直接再讀到內存。
RDB保存了在某個時間點的數據集(全部數據),存儲在一個二進制文件中,只有一個文件,默認是dump.rdb。RDB默認是開啟的,默認保存到啟動redis的文件中。
二進制文件的讀寫特別高,redis.conf文件中配置即可,
保存策略的修改 save 900 1:900秒內有1個key被改動,可以配置多個策略,同時起作用,任意一條進行內存數據就寫到文件中
dbfilename:設置RDB的文件名,默認是dump.rdb
dir:指定RDB文件的存儲位置,默認是./ 就是當前目錄,在哪裏啟動,哪裏就是當前目錄
配置步驟:
在redis的cli窗口中執行shutdown將redis停掉
在linux系統窗口中刪除dump.rdb文件: rm dump.rdb -f
ll dump.rdb 文件已被刪除
cd到redis.conf
vim redis.conf
搜索snap 可以看到默認配置的三個策略,任意一個滿足就都執行
關閉RDB的方式: 將save ""註釋去掉,將save三種策略註釋,就關閉了
當然可以自己設置快照策略:
save 20 3;20秒內有3個數據做改動就保存
dbfilename dump.rdb
dir ./
剩下兩個參數不改動
./redis-server ../redis.conf
ll dump.rdb
ping =>PONG
set k1 v1
set k2 v2
set k3 v3
滿足了20秒內有3個數據做改動了就開始save執行RDB了
ll dump.rdb就有這個文件了
存在的問題:save <seconds> <changes>時間和修改的數目
save 300 10,300秒內只改變了9個key的時候redis就崩潰了,那這9個數據就丟失了,沒保存上
所以如果對數據保存要求不高且希望保存性能高,可以使用RDB的方式
適合做備份,條件滿足就會將數據寫道二進制文件中,速度快,但是有可能會造成數據丟失,默認是開啟的;
2.AOF:
Append-only file:每次將redis中數據修改的命令都記錄到AOF文件中,不記錄讀取,只記錄修改,每一個數據修改命令記錄到文件中,redis重啟的時候讀取文件,將命令都執行一遍;
文本文件記錄的寫入命令,默認是沒有開啟的,在redis.conf文件中開啟AOF,將redis.conf文件中的appendonly修改為yes就開啟了
appendfilename appendonly.aof
dir:默認是./
appendfsync:配置向aof文件寫命令數據的策略: 有以下參數來做:
(1)no :不主動進行同步操作,而是完全交由操作系統來做(即每30秒一次),比較快但不是很安全,會有數據丟失;
(2)always:每次執行寫入都會執行同步,慢一些但是比較安全
(3)everysec:每秒執行一次同步操作,比較平衡,介於速度和安全之間,這個是默認項;
停掉redis,修改配置文件redis.conf,aof文件中可以編輯,可以修改內存崩潰的數據將其刪除
aof文件越來越大,數據恢復的時候會越來越慢,但是redis有個redis的機制:
set age 10 ,set age 20 ,set age 30,aof文件重寫的時候set age 30成功了,將set age 10和set age 20 刪除掉,縮小aof的尺寸,開始執行重寫就是auto-aof-rewrite-min-size: 默認64mb,允許重寫的最小aof文件大小,當aof文件大於64m的時候就開始整理aof文件,去掉無用的操作命令,縮小aof文件;
如果對數據丟失要求高數據很重要,速度要求不是很快的話可以使用aof,
aof和rdb可以同時存在同時起作用,首先讀取aof文件,對數據保存比rdb更完整的
AOF:
Redis學習-4-2 Redis持久化