您好,登錄后才能下訂單哦!
背景:RDB不足之處
1.耗時,耗性能
生成快照文件耗時,load快照文件耗時
Fork子進程網絡開銷
寫文件磁盤I/O開銷2.不可控,丟失數據
會丟失最后一次快照最后操作的數據。
一、工作流程
Redis寫操作命令 ——> aof緩沖區 ——> aof文件
注意,aof緩沖區的數據同步到磁盤的頻率d由aof策略決定
二、AOF三種策略
1.Always 總是
每條指令都即時寫入
不會丟失數據,磁盤I/O開銷
2.Every second每秒
系統默認策略
每分鐘寫入一次
可能丟失一秒數據
3.No系統自動
不可控
3、AOF重寫
隨著時間得推移,aof文件日益變大。會降低磁盤性能,降低數據恢復速度。
目的:1.減少磁盤占用;2.加快恢復速度。
重寫操作
方式一,客戶端手動發送指令bgrewriteof
服務端fork子進程,子進程對內存中的數據進行回塑然后寫入現有的aof文件。
方式二,通過配置文件觸發
文件增長率
auto-aof-rewrite-percentage 100
最小文件尺寸
auto-aof-rewrite-min-size 64mb
四、AOF實驗
1.redis寫操作
27.0.0.1:6379> set hello world
OK
127.0.0.1:6379> set hello php
OK
127.0.0.1:6379> set hello java
OK
127.0.0.1:6379> set hello jack
OK
127.0.0.1:6379> set zhang san
OK
127.0.0.1:6379> set li si
OK
127.0.0.1:6379> set li xiaolong
OK
上述操作多次覆寫hello,li兩個key。
2.查看aof日志文件
$ sudo cat -b /var/lib/redis/appendonly.aof
1 REDIS0009? redis-ver5.0.3?
? 2 redis-bits?@?ctime??]used-mem??
aof-preamble??$e???q ?*2
3 $6
4 SELECT
5 $1
6 0
7 *3
8 $3
9 set
10 $5
11 hello
12 $5
13 world
14 *3
15 $3
16 set
17 $5
18 hello
19 $3
20 php
21 *3
22 $3
23 set
24 $5
25 hello
26 $4
27 java
28 *3
29 $3
30 set
31 $5
32 hello
33 $4
34 jack
35 *3
36 $3
37 set
38 $5
39 zhang
40 $3
41 san
42 *3
43 $3
44 set
45 $2
46 li
47 $2
48 si
49 *3
50 $3
51 set
52 $2
53 li
54 $8
55 xiaolong
3.重寫aof
127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started
4.查看重寫后的aof日志文件
whqlkj@whqlkj:~$ sudo cat -b /var/lib/redis/appendonly.aof
1 REDIS0009? redis-ver5.0.3?
? 2 redis-bits?@?ctime????]used-mem??
aof-preamble???zhangsanlxiaolonghellojack??X?-???
五、RDB與AOF對比
對比環節 | RDB | AOF |
---|---|---|
啟動優先級 | 低 | 高 |
數據恢復速度 | 快 | 慢 |
文件大小 | 小(rdb二進制壓縮文件) | 大(重寫后的日志記錄文件) |
數據安全 | rdb丟失數據(可能會丟失最后一次save/bgsave快照之后操作的數據) | aof根據策略決定(詳見3種同步策略) |
操作重量級 | 重(rdb快照) | 輕(aof追加日志) |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。