1. 程式人生 > >Redis學習-4-2 Redis持久化

Redis學習-4-2 Redis持久化

位置 多個 崩潰 系統 配置步驟 bfile 時間 計算機 寫入

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持久化