一.什么是持久化
持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。
二.RDB(Redis DataBase)
2.1RDB是Redis默认的持久化方式
按照一定的时间将内存中的数据以快照的形式保存到磁盘中去,对应产生的文件为dump.db。(可以在上一篇redis.conf中查看对应的save参数,save参数决定快照的周期)
2.2高性能
Redis会单独创建(fork)一个子进程来进行写操作,让主进程继续处理命令,所以是IO最大化。
使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了Redis的高性能。
2.3触发机制:
- save规则满足的情况下,会自动触发rdb规则
- 执行flushall命令,也会触发rdb规则
- 退出redis,也会产生rdb
2.4恢复rdb文件
- /usr/local/bin 下面的dum.rpd先保存起来
- flushall或者shutdown会发现数据丢失
- 把保存的dump.rpd放在bin下面重启,发现数据恢复了
优点:
- 只有一个dump.rdb,方便持久化
- 容灾性好,一个文件可以保存到安全的磁盘
- 性能最大化
- 相对于数据量大时,比AOF的启动效率更高
缺点:
- 数据安全性较低,需要一定的时间间隔进程操作,如果redis意发生故障,会发生数据丢失
- fork进程的时候,会占用一定的内存空间
三.AOF(Append Only File)
AOF持久化是将Redis执行的每次写命令记录到单独的日志文件中,
当重启Redis会重新将持久化的日志中文件恢复数据。
优点:
- 数据安全,aof持久化可以配置appendfsync属性,有always,每进行一次命令操作就记录到aof中去
sync。消耗性能
appendfsync everysec # 每秒执行一次 sync,可能会丢失这1s的数据!
# appendfsync no # 不执行 sync,这个时候操作系统自己同步数据,速度最快!
3.AOF机制的rewirte模式。AOF文件没有被rewrite之前可以删除某些命令。
缺点:
- AOF文件比RDB文件大,且恢复速度慢。
- 数据量大的时候,比RDB启动效率低。
四.总结
- 使用AOF原因:AOF文件保存的数据集要比RDB文件保存的数据集完整,更新频率比RDB高,比RDB更安全更大,优先使用AOF还原数据,如果两个都配置优先加载AOF
- 使用RDB原因:可以承受数分钟以内的数据丢失,RDB性能比AOF好,RDB恢复速度比AOF快,RDB可以避免AOF程序的bug