RDB模式
1、什么是RDB
每隔一段时间,把内存中的数据写入磁盘,恢复的时候,他会自动从工作区拿出来进行恢复
2、RDB的优劣势
优势
每隔一段时间,全量备份
备份简单,可以直接传输文到其他地方
备份的过程中会fork一个新的进程来进行文件的存储
劣势
发生故障时,会丢失上次备份到当前时间的数据
fork的进程会和父进程一摸一样,会导致内存随时膨胀两倍
手动备份RDB
手动触发有两个命令
- save命令
在执行的时候会阻塞Redis的服务,直到RDB文件完成才会释放我们Redis进程恢复读写操作
- bgsave命令
执行bgsave的时候会在后台fork一个进程进行RDB的生成,不影响主进程的业务操作
使用RDB恢复数据
只需要将dump.rdb移动到我们redis.conf配置的dir(dir ./)目录下,就会在Redis启动的时候自动加载数据到内存,但是Redis在加载RDB过程中是阻塞的,直到加载完毕才能恢复操作。获取目录位置:redis-cli> config get dir
AOF模式
RDB会丢失最后一次备份和系统宕机之间的数据,所以就需要增量备份的过程了,什么是Redis的增量备份,就是AOF,优点像MySQL的Binlog
AOF的特点
以日志形式来记录用户的请求和写操作,读操作不会记录
文件是追加的形式而不是修改的形式
redis的aof恢复其实就是从头到尾执行一遍
优势
AOF更加耐用,可以以秒为单位进行备份,如果发生问题,只丢失一秒的数据
以log日志的方式进行存放和追加数据,如果磁盘已经很满了,会执行redis-check-aof工具
当aof文件太大的时候,redis在后台会自动重写aof,相当于把redis的aof文件进行压缩
AOF日志包含所有写操作,便于redis的恢复
劣势
相同的数据,AOF比RDB大
AOF比RDB同步慢
一旦AOF文件出现问题,数据就会不完整
RDB还是AOF,使用那个呢
Redis在RDB和AOF同时开启的过程中,重启后会优先加载AOF文件
AOF文件在开启后就会自动创建一个空文件
重启后Redis会优先加载AOF:默认是以秒为单位进行保存的,在逻辑上比RDB的数据完整
在redis客户端可以在线更改配置,当然持久化也不例外:
config get appendonly
config set appendonly yes