0%

redis-持久化

RDB

特点

1
默认开启rdb

优点

1
2
3
4
1.只有一个文件 dump.rdb,方便持久化。 
2.性能大化,主进程不会进行任何 IO 操作,保证了 redis 的高性能 ,使用fork()创建子进程来进行RDB备份操作,子进程拥有父进程数据的指针,不需要全部数据拷贝一份,当有主进程有新数据进行修改时,触发系统内核的copy on write写时复制的机制,新数据写入新的内存位置,之后再操作旧数据的指针,而子进程的指针仍指向旧数据,因此两个进程的数据是隔离的,也保证了数据备份的时点性,
3.二进制文件,相比于aof恢复比较快
4.存在数据丢失的可能性

缺点

1
1.数据安全性低。RDB 是间隔一段时间进行持久化,如果持久化之间 redis 发 生故障,会发生数据丢失。

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
################################ SNAPSHOTTING  ################################
#RDB触发规则,多少秒触发了多少次则执行RDB,“”表示不开启RDB,可以多个save规则同时配置
# save ""
save 900 1
save 300 10
save 60 10000

# bgsave快照出错时是否停止数据写入
stop-writes-on-bgsave-error yes

# 是否开启压缩
rdbcompression yes

# 是否设置检查点
rdbchecksum yes

# rdb文件名称
dbfilename dump.rdb

# 是否同步删除rdb文件
rdb-del-sync-files no

# 持久化文件存放的目录(RDB和AOF问备份文件都会放在这里)
dir /var/lib/redis/6379

AOF

特点

1
2
3
4
5
6
1.满足条件时触发重写
4.0以前,重写时,删除抵消命令,合并重复命令
4.0后,重写时,将旧数据RDB到aof文件中,之后将增量数据append到aof中
2.redis是内存数据库,写操作触发io,造成性能下降
3.aof可以修改触发级别:no、always、everysec
4.如果RDB、AOF两个都配了优先加载AOF

优点

1
2
1.数据安全,aof持久化可以配置appendfsync属性,有always,每进行一 次 命令操作就记录到aof文件中一次。 
2.AOF 机制的 rewrite 模式。AOF 文件没被 rewrite 之前(文件过大时会对命 令 进行合并重写),可以删除其中的某些命令(比如误操作的 flushall))

缺点

1
1.AOF 文件比 RDB 文件大,且恢复速度慢。

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
############################## APPEND ONLY MODE ###############################
# 是否开启aof
appendonly no

# aof文件名
appendfilename "appendonly.aof"

# aof触发策略
appendfsync always #每个动作都追加
appendfsync everysec #默认配置,每秒都追加
appendfsync no #等待内核缓冲区满了在一起追加

#当有其他子进程在对磁盘进行写操作(rdb)或者重写操作时,no表示不参与争抢,此时不进行aof操作
no-appendfsync-on-rewrite no

# 重写配置
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb #aof达到64MB时触发重写

aof-load-truncated yes

#是否混合使用RDB和AOF备份,重写时会将旧数据以RDB形势放入aof文件前面,新数据以追加日志方式写入,[RDB file][AOF tail],当打开aof文件时前面出现"REDIS"证明是开启RDB前置的新AOF混合文件,4.0之后才有的新功能
aof-use-rdb-preamble yes

持久化选择

1
2
3
4
- 一般来说, 如果想达到足以媲美PostgreSQL的数据安全性,你应该 同时使用两种持久化功能。在这种情况下,当 Redis 重启的时候会优先载入AOF文件来恢复原始的数据,因为在通常情况下AOF文件保存的数据集要比RDB文件保存的数据集要完整。 
- 如果非常关心数据,但仍然可以承受数分钟以内的数据丢失,那么可以只使用RDB持久化。
- 有很多用户都只使用AOF持久化,但并不推荐这种方式,因为定时生成RDB快照(snapshot)非常便于进行数据库备份, 并且 RDB 恢复数据集的速度也要比AOF恢复的速度要快,除此之外,使用RDB还可以避免AOF程序的bug。
- 如果只希望数据在服务器运行的时候存在,你也可以不使用任何持久化方式。