RDB:一次数据快照,相当于把当前的数据以文本的形式保存到硬盘中,当redis重启时会自动加载备份的文件来恢复数据,分为手动开启和config里面配置自动备份策略
在redis.config里面开启
#找到这一行开启,backup.rdb是文件名,可以自定义
dbfilename backup.rdb
手动备份分为save命令和bgsave命令,当使用save时,这个进程会阻塞redis主进程,直到所有备份完成后,才会开启,所以一般不用来在线上环境运行,而是bgsave(redisRDB的自动保存策略也是bgsave),使用bgsave的时候,会fork(复制当前进程内数据)开辟一个子进程来备份,同时不影响主进程的运行
127.0.0.1:6379> save
ok
这个命令会手动开启备份,并保存一份文件到redis目录下,一般都是在redis根目录,如果找不到备份位置,那么输入以下命令会显示出来
127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "E:\\Java\\redis"
#同样,可以通过set来改变dir的保存位置,但是恢复数据时需要把rdb文件复制到根目录下,redis才会自动识别并加载数据
在redis.config里面可以配置自动备份策略,如下
save 10 20
save 600 100
这两行代表了当redis 10秒内更新了20次key和600秒内更新了100次key时,都会自动备份一次rdb数据保存在对应的目录下。
AOF:跟RDB不同的是aof会实时记录redis的每一次命令记录,redis启动时会生成一个aof文件在根目录下(指定位置跟rdb同理),然后每次redis执行命令,都会往这个文件里面追加一条记录,这样不管做了多少操作,直到redis宕机之前,数据都会是最新的,当然这会牺牲性能为代价。
aof默认是不开启的,需要启动的话要到redis.config中去手动开启
# Please check http://redis.io/topics/persistence for more information.
appendonly yes
随着时间的推移,这个aof文件会越来越大,于是redis提供了重写机制,通过重写,可以优化这个文件的大小来提高运行速度
手动重写
#执行bgrewriteaof命令即可重写aof文件
127.0.0.1:6379> bgrewriteaof
Background append only file rewriting started
自动触发:根据config里面auto-aof-rewrite-min-size和auto-aof-rewrite-percentage参数确定自动触发时机
auto-aof-rewrite-min-size:表示运行AOF重写时文件最小体积,默认为64MB
auto-aof-rewrite-percentage:代表当前AOF文件空间(aof_current_size)和上一次重写后AOF文件空间(aof_base_size)的值