redis是内存型数据库,不做持久化,一旦退出或断电,数据将会丢失
在制定的时间的时间间隔内将内存中的数据集快照写入磁盘,也就是快照,它恢复时将快照文件直接读取到内存里。
redis会单独创建(fork)一个子进程来进行持久化,首先会将数据写到一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。整个过程是不需要进行任何IO操作的,这就确保了极高的性能。如果需要进行大规模数据的回复,且对于数据回复的完整性不是很敏感,那么RED方式要比AOF方式更加的高校。RDB的缺点是最后一次持久化后的数据可能丢失。我们默认的就是RDB,一般情况下不需要修改这个配置。
RDB默认保存的文件就是dump.rdb文件
默认的文件名可以在配置文件中进行配置
将我们的所有命令都记录下来,恢复的时候将这个文件全部都在执行一遍
以日志的形式去记录每一个操作,将redis执行过的所有指令记录下来(读操作不记录), 只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据库。
在主从复制中,rdb就是一个备用的作用
AOB保存的是appendonly.aof文件
默认的文件名可以在配置文件中进行配置
如果aof的文件发生了错误,redis默认的策略是拒绝客户端连接,可以使用redis-check-aof
来修复它
redis-check-aof --fix filename
重写规则
如果aof的文件大小配置文件中的大小,那么redis会fork一个新的进程来对文件进行重写
1、RDB持久化的方式能够在制定的时间间隔内对你的数据库进行快照存储
2、AOF持久化方式记录每次对服务器写的操作,当服务器重启的时候回重新执行这些命令来恢复原始的数据。aof命令以redis、协议追加保存每次写的操作到文件的末尾,redis还能对aof文件进行后台重写,使得aof文件的体积不至于过大。
3、只是用redis做缓存,可以不适用持久化操作
4、同时开启两种持久化方式
5、性能建议
因为rdb文件中用于后备用途,建议只在slave上持久化rdb文件,而且只需要15分钟备份一次就够了,只保留900 1这条规则
如果enable aof,好处是在最恶劣的情况下丢失的不会超过2秒钟的数据,启动脚本较简单只load自己的aof文件就可以了,代价是有一定的io操作,而是aof的重写过程新数据到新文件的阻塞是不可避免的,只要硬盘容量允许,应该尽量减少rewrite的操作,aof的默认重写大小为60m,可以执行调整大小来避免重写的发生。
如果disable aof,仅靠主从复制实现高可用性也行,能省调一大笔io,也减少了重写的发生。代价是如果主节点和从节点同时倒掉,会丢失设置的同步的时间内的数据,启动脚本也要比较两个主从的edb文件,载入较新的那个。
原文:https://www.cnblogs.com/ivy-blogs/p/13919612.html