1. save(同步)java
2. bgsave(異步)linux
命令 | save | bgsave |
---|---|---|
IO類型 | 同步 | 異步 |
阻塞 | 是 | 是(阻塞發生在fork) |
複雜度 | O(N) | O(N) |
優勢 | 不會消耗額外內存 | 不阻塞客戶端命令 |
缺點 | 阻塞客戶端命令 | 須要fork,消耗內存 |
3. 自動ios
配置 | seconds | changes |
---|---|---|
save | 900 | 1 |
save | 300 | 10 |
save | 60 | 10000 |
4. 配置redis
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir ./
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
複製代碼
5. 最佳配置緩存
dbfilename dump-${port}.rdb
dir /bigdistpath
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
複製代碼
1. 全量複製安全
2. debug reloadbash
3. shutdown微信
127.0.0.1:6379> dbsize
(integer) 1000000
127.0.0.1:6379> info memory
# Memory
used_memory:105221280
used_memory_human:100.35M
複製代碼
127.0.0.1:6379> set hello word
OK
127.0.0.1:6379> get hello
複製代碼
127.0.0.1:6379> save
OK
(4.77s)
127.0.0.1:6379> get hello
"word"
(2.22s)
複製代碼
[root@localhost redis]# cd data/
[root@localhost data]# ll
總用量 52428
-rw-r--r--. 1 root root 7365 12月 21 14:29 6379.log
-rw-r--r--. 1 root root 4809 12月 20 23:40 6382.log
-rw-r--r--. 1 root root 53666783 12月 21 14:29 dump-6379.rdb
複製代碼
127.0.0.1:6379> bgsave
Background saving started
複製代碼
[root@localhost redis]# ps -ef | grep redis-
root 4987 1 1 14:21 ? 00:00:15 redis-server 0.0.0.0:6379
root 5271 3826 0 14:33 pts/0 00:00:00 redis-cli
root 5304 4987 56 14:36 ? 00:00:01 redis-rdb-bgsave 0.0.0.0:6379
root 5306 5143 0 14:36 pts/2 00:00:00 grep --color=auto redis-
複製代碼
#save 900 1
#save 300 10
save 60 5
複製代碼
127.0.0.1:6379> flushall
OK
(0.70s)
127.0.0.1:6379> dbsize
(integer) 0
複製代碼
127.0.0.1:6379> set a b
OK
127.0.0.1:6379> set c d
OK
127.0.0.1:6379> set e f
OK
127.0.0.1:6379> set g h
OK
127.0.0.1:6379> set i j
OK
127.0.0.1:6379> set m n
OK
複製代碼
[root@localhost data]# tail -f 6379.log
5475:M 21 Dec 14:45:03.075 * 5 changes in 60 seconds. Saving...
5475:M 21 Dec 14:45:03.077 * Background saving started by pid 5494
5494:C 21 Dec 14:45:05.018 * DB saved on disk
5494:C 21 Dec 14:45:05.019 * RDB: 10 MB of memory used by copy-on-write
5475:M 21 Dec 14:45:05.073 * Background saving terminated with success
複製代碼
1. 耗時,耗性能網絡
2. 不可控,丟失數據app
配置 | 動做 |
---|---|
T1 | 執行多個寫命令 |
T2 | 知足RDB自動建立的條件 |
T3 | 再次執行多個寫命令 |
T4 | 宕機 |
命令 | always | everysec | no |
---|---|---|---|
優勢 | 不丟失數據 | 每秒一次fsync | 不用管 |
缺點 | IO開銷較大,通常的sata盤只有幾百TPS | 丟一秒數據 | 不可控 |
把一些能夠優化的命令進行化簡,從而達到兩個目的
1. bgrewriteaof
2. AOF重寫配置
配置名 | 含義 |
---|---|
auto-aof-rewrite-min-size | AOF文件重寫須要的尺寸 |
auto-aof-rewrite-percentage | AOF文件增加率 |
統計名 | 含義 |
---|---|
aof-current-size | AOF當前尺寸(單位:字節) |
aof-base-size | AOF上次啓動和重寫的尺寸(單位:字節) |
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
dir /home/redis/data
no-appendfsync-on-rewrite yes
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
複製代碼
127.0.0.1:6379> set hello world
OK
127.0.0.1:6379> set hello java
OK
127.0.0.1:6379> set hello redis
OK
127.0.0.1:6379> incr counter
(integer) 1
127.0.0.1:6379> incr counter
(integer) 2
127.0.0.1:6379> rpush list a
(integer) 1
127.0.0.1:6379> rpush list b
(integer) 2
127.0.0.1:6379> rpush list c
(integer) 3
複製代碼
[root@localhost redis]# cd data
[root@localhost data]# ll
總用量 40
-rw-r--r--. 1 root root 21736 12月 21 16:57 6379.log
-rw-r--r--. 1 root root 4809 12月 20 23:40 6382.log
-rw-r--r--. 1 root root 277 12月 21 16:58 appendonly.aof
-rw-r--r--. 1 root root 127 12月 21 15:22 dump-6379.rdb
複製代碼
[root@localhost data]# more appendonly.aof
*3
$3
set
$5
hello
$5
world
複製代碼
咱們稍微看一下文件格式
下面咱們來看下重寫
127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started
複製代碼
*3
$3
SET
$5
hello
$5
redis
複製代碼
1. RDB和AOF比較
命令 | RDB | AOF |
---|---|---|
啓動優先級 | 低 | 高 |
體積 | 小 | 大 |
恢復速度 | 快 | 慢 |
數據安全性 | 丟數據 | 根據策略決定 |
輕重 | 重 | 輕 |
2. RDB最佳策略
3. AOF最佳策略
4. 最佳策略
1. 同步操做
2. 與內存量息息相關:內存越大,耗時越長(與機器類型有關)
3. info:latest_fork_usec
4. 改善fork
1. CPU
2. 內存
3. 硬盤
你們能夠關注個人微信公衆號一塊兒學習進步。