持久化方法
Redis提供了两种持久化方法 - RDB(Redis DataBase) 和 AOF(Append Only File)
1. RDB 持久化- 根据配置的时间间隔对数据集做快照并写入硬盘。
- 优点:恢复速度快,磁盘 io 较少。
- 缺点:数据可能丢失最近一次快照之后的数据。
- 应用场景:可以接受一定数据丢失,追求快速重启的场景。
################################ SNAPSHOTTING ################################
#
# Save the DB on disk:
#在给定的秒数和给定的对数据库的写操作数下,自动持久化操作。
# save <seconds> <changes>
#
save 900 1
save 300 10
save 60 10000
#bgsave发生错误时是否停止写入,一般为yes
stop-writes-on-bgsave-error yes
#持久化时是否使用LZF压缩字符串对象?
rdbcompression yes
#是否对rdb文件进行校验和检验,通常为yes
rdbchecksum yes
# RDB持久化文件名
dbfilename dump.rdb
#持久化文件存储目录
dir ./
2. AOF 持久化- 将所有写入命令追加到 AOF 文件,像日志一样记录每次写入变化。
- 优点:数据完整性好,不丢失写入命令。
- 缺点:文件体积增长快,恢复速度慢。
- 应用场景:数据完整性要求高的场景。
############################## APPEND ONLY MODE ###############################
#开启AOF持久化方式
appendonly no
#AOF持久化文件名
appendfilename "appendonly.aof"
#每秒把缓冲区的数据fsync到磁盘
appendfsync everysec
# appendfsync no
#是否在执行重写时不同步数据到AOF文件
no-appendfsync-on-rewrite no
# 触发AOF文件执行重写的增长率
auto-aof-rewrite-percentage 100
#触发AOF文件执行重写的最小size
auto-aof-rewrite-min-size 64mb
#redis在恢复时,会忽略最后一条可能存在问题的指令
aof-load-truncated yes
#是否打开混合开关
aof-use-rdb-preamble yes
总结:
- 对于大中型的应用,我们既想保证数据完整性又想保证高效率,就应该结合使用 RDB 和 AOF 两种方式;
- 如果只是需要保证数据的完整性,保护数据不会丢失,那么优先使用 AOF 方式;
- 如果是处理大规模的数据恢复,追求更高更快的效率的话,优先使用 RDB 方式。
3. 最佳实践- 同时使用 AOF 和 RDB 的持久化方式。
- RDB 提供备份及快速重启,AOF 提供数据完整性。
- 通过配置策略调优AOF文件的体积大小。
- 所以综合利用两者的优势能获得数据持久化的最佳方案。
使用:
# Redis配置文件
# AOF配置
appendfilename "appendonly.aof" # AOF文件名
appendfsync "everysec" # 每秒同步一次AOF文件
auto-aof-rewrite-percentage 90 # AOF重写阈值
auto-aof-rewrite-min-size 64mb # AOF重写最小文件大小
aof-backup-dir "/path/to/backup/directory" # AOF备份目录
# RDB配置
dbfilename "dump.rdb" # RDB文件名
save 900 1 # 900秒内至少有1个修改操作,保存数据到RDB文件
save 300 10 # 300秒内至少有10个修改操作,保存数据到RDB文件
save 60 10000 # 60秒内至少有10000个修改操作,保存数据到RDB文件
rdb-backup-type snap # 使用快照方式备份RDB文件