持久化机制与主从架构
redis有三种持久化机制:RDB、AOF、混合模式
RDB
是redis默认的持久化机制
# 比如redis.conf文件中默认就会开启以下配置,意思是60秒内如果 有1万个key改变就会触发RDB持久化
save 900 1
save 300 10
save 60 10000
持久化的文件的文件名与文件存储路径的配置在redis.conf文件中是下面的配置
dbfilename dump.rdb
dir ./
RDB持久化的方式有两种:
-
save
这条命令在执行时是单线程的,在备份生成rdb文件时会阻塞用户的操作
-
bgsave
rdb持久化底层默认使用的是bgsave
就重新fork一个线程来进行数据备份,不会阻塞用户的操作。在备份过程中如果用户进行了更新操作,这块数据就会被复制一份,生成该数据的副本。然后,bgsave 子进程会把这个副本数据写入 RDB 文件,而在这个过程中,主线程仍然可以直接修改原来的数据。
RDB的优点就是文件体积小、重启恢复数据快
缺点是可能会丢失一段时间的数据,因为我们不可能每秒钟去生成一个rdb文件
AOF
如果要开启AOF持久化我们需要在redis.conf文件中放开下面这一行的配置改为yes
appendonly yes
生成的aof文件名与文件生成目录的配置如下
appendfilename "appendonly.aof"
dir ./
dir这个配置项即指定rdb文件的目录也指定aof文件的目录
AOF文件的触发策略
# appendfsync always
appendfsync everysec
# appendfsync no
- always:每一次更新都会把命令持久化到aof文件中
- everysec:默认项,每秒钟持久化一次
- no:不主动进行持久化,让操作系统在需要的时候刷新数据
aof文件存储内容的格式如下所示
# 执行的原命令
set name hs
# aof文件持久化内容
*3
$3
set
$4
name
$2
hs
其中*3表示这个命令有三个参数:set key value
$3表示下来来这个参数的长度为3,比如set就是3位 name是4位 hs为2位
AOF文件的优点是数据安全性更高,不会丢失很多数据
缺点是文件更大、数据恢复时间慢
AOF文件重写
aof触发文件重写的配置项的
# 其中100是百分比,达到64m就会触发一次文件重写,aof文件自上一次重写后文件大小增长了100%则再次触发重写
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
底层其实就是相当于执行一次bgrewriteaof
命令
比如我现在执行很多次自增操作
127.0.0.1:6379> set number 1
OK
127.0.0.1:6379> incr number
(integer) 2
127.0.0.1:6379> incr number
(integer) 3
127.0.0.1:6379> incr number
(integer) 4
127.0.0.1:6379> incr number
(integer) 5
而aof文件中的内容如下所示
[root@VM-8-7-centos redis-5.0.3]# cat appendonly.aof
*3
$3
set
$6
number
$1
1
*2
$4
incr
$6
number
*2
$4
incr
$6
number
*2
$4
incr
$6
number
*2
$4
incr
$6
number
此时我手动执行bgrewriteaof命令
127.0.0.1:637