目录
一、RDB(Redis DataBase)
1、简介
2、持久化流程
3、dump.rdb文件
4、配置文件
5、rdb的备份
6、rdb的恢复
7、优势
8、劣势
二、AOF(Append Only File)
1、简介
2、持久化流程
3、AOF和RDB同时开启
4、AOF启动
5、AOF恢复
6、AOF同步频率设置
7、优势
8、劣势
三、总结,用哪个
1、官方建议
2、性能建议
1.1 是什么
在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里。
1.2 备份是如何执行的
Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到 一个临时文件中,待持久化过程都结束了,再用这个临时文件替换上次持久化好的文件。 整个过程中,主进程是不进行任何IO操作的,这就确保了极高的性能 如果需要进行大规模数据的恢复,且对于数据恢复的完整性不是非常敏感,那RDB方式要比AOF方式更加的高效。RDB的缺点是最后一次持久化后的数据可能丢失
1.3 Fork
Fork的作用是复制一个与当前进程一样的进程。新进程的所有数据(变量、环境变量、程序计数器等) 数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程。
在redis.conf中配置文件名称,默认为dump.rdb。
rdb文件的保存路径,也可以修改。默认为Redis启动时命令行所在的目录下。
sava:这里是用来配置触发 Redis的持久化条件,也就是什么时候将内存中的数据保存到硬盘。默认如下配置:
save 3600 1 # 表示3600 秒内如果至少有 1 个 key 的值变化,则保存
save 300 100 # 表示300 秒内如果至少有 100 个 key 的值变化,则保存
save 60 10000 # 表示60 秒内如果至少有 10000 个 key 的值变化,则保存
stop-writes-on-bgsave-error:默认值为yes。当启用了RDB且最后一次后台保存数据失败,Redis是否停止接收数据。
rdbcompression:默认值是yes。对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。
rdbchecksum:默认值是yes。在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。
dbfilename:设置快照的文件名,默认是 dump.rdb
dir:设置快照文件的存放路径,这个配置项一定是个目录,而不能是文件名。使用上面的 dbfilename 作为保存的文件名。
5.1 先通过config get dir 查询rdb文件的目录
5.2 将*.rdb文件拷贝到别的地方
6.1 关闭redis
6.2 先把备份的文件拷贝到工作目录下
6.3 启动Redis, 备份数据会直接加载
以日志的形式来记录每个写操作(增量保存),将Redis执行过的所有写指令记录下来(读操作不记录), 只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换言之,redis 重启的话就根据日志文件的内容将写指令从前到后执行一次以完成数据的恢复工作。
AOF和RDB同时开启,系统默认取AOF的数据(数据不会存在丢失)
默认不开启aof,修改默认的appendonly no,改为yes。重启redis服务。
aof文件的保存路径,同RDB的路径一致。可以在redis.conf中配置文件名称,默认为 appendonly.aof
AOF的备份机制和性能虽然和RDB不同, 但是备份和恢复的操作同RDB一样,都是拷贝备份文件,需要恢复时再拷贝到Redis工作目录下,启动系统即加载。
5.1 正常恢复
5.2 异常恢复
官方推荐两个都启用。如果对数据不敏感,可以选单独用RDB。
不建议单独用 AOF,因为可能会出现Bug。
如果只是做纯内存缓存,可以都不用
Redis还能对AOF文件进行后台重写,使得AOF文件的体积不至于过大
如果使用AOF,好处是在最恶劣情况下也只会丢失不超过两秒数据,启动脚本较简单只load自己的AOF文件就可以了。
代价,一是带来了持续的IO,二是AOF rewrite的最后将rewrite过程中产生的新数据写到新文件造成的阻塞几乎是不可避免的。
只要硬盘许可,应该尽量减少AOF rewrite的频率,AOF重写的基础大小默认值64M太小了,可以设到5G以上。
默认超过原大小100%大小时重写可以改到适当的数值。