Maxbad`Blog

Redis的RDB和AOF选择

2020-10-11 · 2 min read

aof,rdb是两种 redis持久化的机制,用于crash后,redis的恢复。

rdb特性

写操作频繁的时候,不启用备份来换取更高的性能,待手动运行save的时候,再做备份.

fork一个进程,遍历hash table,利用copy on write,把整个db dump保存下来。
save, shutdown, slave 命令会触发这个操作。
粒度比较大,如果save, shutdown, slave 之前crash了,则中间的操作没办法恢复。
平时写操作的时候不触发写,只有手动提交save命令,或者是关闭命令时,才触发备份操作。

aof特性

牺牲一些性能,换取更高的缓存一致性

把写操作指令,持续的写到一个类似日志文件里。(类似于从postgresql等数据库导出sql一样,只记录写操作)
粒度较小,crash之后,只有crash之前没有来得及做日志的操作没办法恢复。
持续的用日志记录写操作,crash后利用日志恢复;
  • Redis 默认开启RDB持久化方式,在指定的时间间隔内,执行指定次数的写操作,则将内存中的数据写入到磁盘中。
  • RDB 持久化适合大规模的数据恢复但它的数据一致性和完整性较差。
  • Redis 需要手动开启AOF持久化方式,默认是每秒将写操作日志追加到AOF文件中。
  • AOF 的数据完整性比RDB高,但记录内容多了,会影响数据恢复的效率。
  • Redis 针对 AOF文件大的问题,提供重写的瘦身机制。
  • 若只打算用Redis 做缓存,可以关闭持久化。
  • 若打算使用Redis 的持久化。建议RDB和AOF都开启。其实RDB更适合做数据的备份,留一后手。AOF出问题了,还有RDB。