现在有 项目用到redis的做内存,同时也需要做持久化备份,看了一下redis自身的持久化
redis自身支持两种持久化方式RDB和AOF
1、RDB是定时对数据库内存做快照的方式备份整个内存数据库,这种方式,在redis或者服务器故障的时候有可能会丢失大量数据,但是这种方式是主进程fork一个子进程来执行,不影响到主进程的效率,也不会阻塞,同时保存数据集的完整性,如果对数据丢失能容忍一个小时左右的数据,可以采用这种方式,性能高。
2、AOF是将redis所有写的操作作为日志存在AOF文件中,采用追加的方式,通常可以设置no:不做aof追加,always,每次写操作都做一次追加aof文件,everysec:每秒钟嘴一个追加,其中always不会丢失任何数据,但是会耗很多性能,其中everysec是推荐使用的,其速度也和rdb相差无几
3、如果对数据完整性和性能都有要求的情况下,可以同时设置RDB和AOF方式。
在恢复数据的时候,不知道redis是 怎么选择优先加载dump.rpd和appendonly.aof两个文件中的哪个?于是我做了一下测试:
aof 有数据, dump不存在, rdb开 aof关 不加载数据
aof 有数据, dump不存在, rdb关 aof关 不加载数据
aof 有数据, dump不存在, rdb关 aof开 加载数据
aof 有数据, dump不存在, rdb开 aof开 加载数据
aof 不存在, dump有数据, rdb开 aof关 加载数据
aof 不存在, dump有数据, rdb关 aof关 加载数据
aof 不存在, dump有数据, rdb关 aof开 不加载数据
aof 不存在, dump有数据, rdb开 aof开 不加载数据-执行shutdown命令之后dump文件中的数据清空
通过上面发现,在RDB和AOF同时都不设置的情况下,如果dump.rdb存在,会加载dump.rdb的数据
如果RDB和AOF同时设置的情况下,会优先加载appendonly.aof的数据