RDB
RDB是把当前进程数据生成快照保存到磁盘上
手动触发生成快照
save
bgsave
- save:会阻塞当前Redis服务器,直到RDB过程完成
- bgsave:Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束,阻塞只发生在fork阶段,一般时间很短
自动触发
vim /etc/redis/redis.conf
save 900 1
save 300 10
save 60 10000
- 如果900秒内有1条数据发生变化,则进行快照
- 如果300秒内有10条数据发生变化,则进行快照
- 如果60秒内有10000条数据发生变化,则进行快照
# 备份文件名称
dbfilename dump.rdb
# 备份文件路径
dir /var/lib/redis/data/
# 如果持久化出错,主进程是否停止写入
stop-writes-on-bgsave-error yes
# 是否启用压缩
rdbcompression yes
# 导入时是否检查文件
rdbchecksum yes
AOF
AOF是将数据先写入内存,然后再写入日志的方式备份数据
配置
vim /etc/redis/redis.conf
# 开启AOF持久化
appendonly yes
# 备份文件名
appendfilename "appendonly.aof"
# 备份文件路径
dir /var/lib/redis/data/
# 同步策略
# always:同步写进磁盘
# everysec:每秒都写进磁盘
# no:操作系统控制的写进磁盘
appendfsync everysec
# aof重写期间是否暂停数据同步
no-appendfsync-on-rewrite no
# 重写触发配置
# 如果AOF文件的大小超过上次AOF文件重写后的1倍(100%),触发重写操作
auto-aof-rewrite-percentage 100
# 如果AOF文件大小高于64mb,触发重写操作
auto-aof-rewrite-min-size 64mb
# 指定在Redis启动时,如果发现文件末尾被截断时的处理方式:
# yes:表示加载截断后的 AOF 文件,并在日志中记录截断信息
# no:表示放弃加载截断后的 AOF 文件,并在日志中记录错误信息。此时,Redis 服务器将拒绝启动。
aof-load-truncated yes
# 文件重写策略
aof-rewrite-incremental-fsync yes
混合持久化
单独使用RDB:RDB持久化是基于时间间隔的,如果Redis在快照过程中崩溃,可能会导致数据丢失
单独使用AOF:AOF文件通常比RDB文件大,恢复速度较慢。AOF持久化需要将每一个写操作记录到磁盘上,这个过程会消耗一定的I/O资源。如果同步频率较高,每次写操作后都需要进行磁盘同步,这会显著影响Redis的性能
使用混合持久化配置,Redis将在AOF文件的开头添加一个RDB快照,从而加快恢复速度,同时继续记录 AOF日志以确保数据的持久性,测试的时候如果发现aof没有自动重写压缩文件,那是因为没有首次重写,需要文件达到64mb之后才能正常进行
除了合理配置RDB和AOF的参数之外,还需配置:
# 启用混合持久化
aof-use-rdb-preamble yes
如果aof-use-rdb-preamble参数没有设置为yes,Redis将只使用AOF持久化,而不会在AOF文件中包含 RDB 快照