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. 硬盘
你们能够关注个人微信公众号一块儿学习进步。