一文看懂redis持久化

156 阅读3分钟

持久化方法

Redis提供了两种持久化方法 - RDB(Redis DataBase) 和 AOF(Append Only File)

1. RDB 持久化- 根据配置的时间间隔对数据集做快照并写入硬盘。

  • 优点:恢复速度快,磁盘 io 较少。
  • 缺点:数据可能丢失最近一次快照之后的数据。
  • 应用场景:可以接受一定数据丢失,追求快速重启的场景。 image.png
################################ 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 文件,像日志一样记录每次写入变化。

  • 优点:数据完整性好,不丢失写入命令。
  • 缺点:文件体积增长快,恢复速度慢。
  • 应用场景:数据完整性要求高的场景。 1692634871296.jpg
############################## 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文件