Java学习资料整理-redis(二)持久化

113 阅读2分钟

1、redis有哪些持久化的方式? RDB:rdb是redis默认的持久化方式,在一定的时间内将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。可以通过配置save参数来定义快照的保存周期。 优点:

  • 只有一个dump.rdb文件,方便持久化
  • 容灾性好,一个文件可以保存到安全的磁盘
  • 性能最大化,fork子进程完成写操作,让主进程继续处理命令,所以IO最大化。使用单独子进程来进行持久化,主进程不会进行任何的IO操作。保证了redis的高性能
  • 相对于数据大时,比AOF的启动效率高 缺点: RDB对数据的完整性不是很敏感,假设每五分钟进行一次RDB,在触发下一次RDB持久化前宕机了,那么这五分钟的数据就丢失了,因此RDB适用于对数据不那么敏感的恢复

AOF:AOF是redis执行的每次写命令记录到单独的文件中,当重启redis会重新将持久化的日志文件恢复数据。当两种方式同时开启时,redis会优先从AOF恢复数据 优点:

  • 数据安全,AOF持久化配置append.sync属性,有always,每进行一次命令操作就记录到AOF文件一次
  • 通过append模式写文件,即使中途服务器宕机,可以通过redis-check-aof工具解决数据一致性问题
  • AOF的rewrite的模式,AOF文件没有被rewrite之前(文件过大时会对命令合并重写),可以删除其中某些命令 缺点:
  • AOF文件比RDB更新频率高,对性能损耗比较大
  • AOF文件的体积比较大,恢复的速度相对RDB要慢

总结:RDB和AOF各自有自己的优缺点,现在在新版本的redis中已经出现两者相结合的用法,原理是AOF将所有的命令保存下来后,将这些AOF的命令转换为RDB文件,这样恢复的时候既能保证数据的安全性又能保证恢复的速度