redis中数据的持久化分为两种:1.rdb,2.aof
1.rdb
在指定的时间内将内存中的数据集快照写入磁盘,恢复时,直接将快照文件读取到内存中。
rdb保存的是dump.rdb文件(默认)。
在redis配置文件中可以设置保存的文件名称,以及每次更新文件的间隔时间
如果在开发过程中遇到非常重要的数据想要立刻快照到文件中,则使用save命令(同步,其他先阻塞)或者bgsave命令(异步)即可
2.aof
以日志的形式来记录每个操作,将redis执行过的所有指令记录下来,aof默认保存的时候appendonly.aof文件,要开启aof则需要设置redis.conf配置文件中的appendonly 为yes
如果aof文件有损坏,可以使用redis-check-aof --fix进行修复
aof开启后,当redis重启时会优先执行aof文件来恢复数据
AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集.可以使用命令bgrewriteaof
AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename),遍历新进程的内存中数据,每条记录有一条的Set语句。重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似
Redis会记录上次重写时的AOF大小,默认配置是当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发