概述
redis提供两种模式就行数据持久化,一种叫rdb的方式,另外一种叫aof的方式。RDB的方式是直接持久化内存中的数据,而aof的方式是持久化redis的命令。Redis可以选择使用持久化功能,也可以选择不适用。持久化的方式可以选择两者同时,也可以配置其中任意一种。如果两种方式都配置了,redis启动的时候会默认使用AOF的方式来进行数据的恢复。
1.RDB(Redis DataBase)
rdb方式进行数据持久化,默认是开启的。如果想关闭此功能,可以将redis.conf中的如下部分注释掉,并添加最后一行:
#save 900 1
#save 300 10
#save 60 10000
save ""
如果配置了rdb方式进行数据持久化,存在4中情况会触发redis进行自动快照:
A) 根据配置规则触发,如下规则,只要符合一条,会立刻触发redis进行快照备份。
save 900 1
#每900秒发生一次数据变更
save 300 10
#每300秒发生10次数据变更
save 60 10000 #每60秒发生10000次数据变更
B)手动执行save或者bgsave命令。
C)执行flushall命令,但有个前提,就是用户配置了总动快照的规则。
D)执行主从数据库的复制同步时,也会触发快照
redis在使用rdb进行数据库快照时,会fork出一个子进程,这个子进程会将内存中的数据持久化到一个临时文件中,当写数据完毕的时候,会用临时文件替换掉旧的数据文件。主进程继续提供服务,不会受到影响。数据文件可以通过压缩的方式存储,这样更容易传输。一旦redis异常退出,redis就会丢失最后一次备份到发生异常这段时间的数据,因此,rdb适合对数据完整性要求不高的应用持久化策略。
2.AOF(Append Only File)
AOF的方式默认是关闭的,如果要激活次方法,可以修改redis.conf文件中如下的配置,也可以指定文件的名称:
appendonly yes
#激活AOF
appendfilename appendonly.aof
#指定文件名
AOF的方式和RDB不同,一旦redis执行修改数据的命令,会使这些命令以追加的方式,添加到文件的末尾。redis默认的策略是一秒钟执行一次命令的写入。也就是说,redis发生异常,顶多丢失一秒钟的数据,这种方式的持久化,更适合对数据完整性较高的应用。
一旦文件的内容过多多,redis会使用重写的方式,来压缩文件内容,比如执行100此INCR命令,可以用SET命令替换这一百条命令。
在重写会读取现有的aof文件,从主进程fork出一个子进程完成重写任务。当重写执行的那个点后有新的数据更改命令,会被缓存起来,等重写进程完成之后追加到重写的文件中。最后用此文件替换掉原有的文件。当然,这些命令也会被同步持久化到旧的文件中。
3.RDB和AOF的优缺点对比
AOF | RDB | |
---|---|---|
恢复速度 | 较慢 | 较快 |
丢数据的量 | 丢失1秒内的数据 | 可能会丢失很多数据 |
默认开启 | 否 | 是 |
总结:rdb方式适合数据完整性要求不高,但是需要恢复速度很快的应用;AOF的方式适合数据完整性要求较高,恢复速度要求相对不高的应用。
最后
以上就是贤惠芝麻为你收集整理的Redis学习笔记(6)-redis数据持久化的全部内容,希望文章能够帮你解决Redis学习笔记(6)-redis数据持久化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复