1. RDB(快照)持久化:保存某个时间点的全量数据快照
SAVE:阻塞Redis的服务器进程,直到RDB文件被创建完毕
BGSAVE:Fork出一个子进程来创建RDB文件,不阻塞服务器进程
自动化触发RDB持久化的方式:根据redis.conf配置里的SAVE m n定时触发(用的是BGSAVE)、主从复制时主节点自动触发、执行Debug Reload、执行Shutdown且没有开启AOF持久化。
通过RDB文件恢复数据:将dump.rdb 文件拷贝到redis的安装目录的bin目录下,重启redis服务即可[1]。
优点:全量数据快照,文件小、恢复快。
缺点:内存数据的全量同步,数据量大的话会由于IO而严重影响性能,可能会因为Redis挂掉而丢失从当前至最近一次快照期间的数据。
2. AOF(Append Only File)持久化:采用日志的形式来记录每个写操作,并追加到AOF文件中。
根据AOF文件恢复数据:正常情况下,将appendonly.aof 文件拷贝到redis的安装目录的bin目录下,重启redis服务即可。但在实际开发中,可能因为某些原因导致appendonly.aof 文件格式异常,从而导致数据还原失败,可以通过命令redis-check-aof --fix appendonly.aof 进行修复[1]。
AOF重写机制:AOF的工作原理是将写操作追加到文件中,文件的冗余内容会越来越多,所以 Redis 新增了重写机制。当AOF文件的大小超过所设定的阈值时,Redis就会对AOF文件的内容压缩。
重写的原理:Redis 会fork出一条新进程,读取内存中的数据,并重新写到一个临时文件中,最后替换掉旧的AOF文件。
优点:可读性高、完整性好、不易丢失,适合保存增量数据。
缺点:文件体积大、回复时间长。
3. RDB-AOF混合持久化方式(默认)
BGSAVE做镜像全量持久化,AOF做增量持久化。AOF用来保证数据不易丢失,RDB用来做不同程度的冷备。
参考网页: