首页 > 数据库 > 其他综合 > 正文
Redis持久化:快照和AOF
2017-07-15 11:15:32       个评论    来源:timchen525的专栏  
收藏    我要投稿

Redis持久化数据到硬盘有那些方法?

方法一:快照(snapshotting),将某一时刻的所有数据写入硬盘中。(注意是:全量更新的)

\

默认给出的策略是:

#900秒(15分钟)内有一个keys改变

#300秒(5分钟)内有10个keys改变

#60秒(1分钟)内有10000个keys改变

什么时候更新快照?

如果未注释上面的三个快照持久化策略,此时产生快照持久化的情况有:(1)上述三个策略任意一个满足都将持久化文件;(2)执行redis-cli中shutdown操作或者kill redis进程号;上述两种情况都将产生持久化文件。

如果无需快照周期性持久化,只需将三个策略注释掉。(此时,如果执行shutdown或者kill redis进程号也不会将内存的数据持久化到快照文件中

当然,我们也可以通过显示命令来持久化快照,有两种方式(手动更新快照):(1)在redis客户端redis-cli,执行bgsave;(2)或者执行save;注意:bgsave和save的区别是:bgsave是单独开启一个进程来进行备份,而父进行继续处理命令请求;而save命令会一直阻塞直至快照创建完毕,执行速度比bgsave快的多。

方法二:只追加文件(append-only file,AOF),它会将执行写命令时,将被执行的命令复制到AOF文件的末尾,以此来记录数据发生的变化。因此,Redis只要从头到尾执行一次AOF文件包含的所有命令,就可以恢复AOF文件记录的数据。(可能的问题:数据冗余,产生的文件非常大,最多只可能丢失一秒内产生的数据,如果同步频率用:everysec)

开启AOF持久化的

\

只需要将appendonly默认为no改为yes即可,其文件的位置与快照文件在同一目录下,即上面按个dir的目录。aof持久化后的文件名为appendonly.aof

如果同时开启快照持久化和aop持久化,redis-server启动默认加载的数据库文件是appendonly.aof。

appendfsync选项及同步频率

\

always:每个Redis写命令都要同步写入硬盘,这样会严重降低Redis的速度

everysec:每秒执行一次同步,显示地将多个写命令同步到硬盘(推荐)

no:让操作系统决定应用何时进行同步

 

针对AOF持久化文件冗余导致文件过大解决措施

不难从AOF定义可以看出,如果对相同的数据,比如set aa 123,然后再set aa 333,AOF文件中保存了上面两个操作,而实际上只需保存set aa 333即可。

措施一 在redis.conf中配置:

\

 

在redis.conf中配置如上参数,那么当AOF文件的体积大于64mb,且AOF文件的体积比上一次重写之后的体积大了至少一倍(100%)的时候,Redis将执行bgrewriteaof命令。

措施二 显示的调用bgrewriteaof:

在redis中提供了重写AOF文件的命令:bgrewriteaof,能够移除AOF中的冗余指令,使得AOF文件尽可能的小。该命令与快照中bgsave相似,都是创建一个子进程来处理的。(重写命令:会产生一个新的重写的文件,并删除旧的aof文件,而删除一个大的AOF文件可能会让系统挂起数秒)。


 

问题:如果Redsi同时开启快照和AOF持久化,则Redis重启时会去加载那个文件,如果只是AOF文件呢?

答:不管是否开启快照持久化还是AOF持久化:在Redis在首次加载时,会先去查找dum.rdb文件,如果找不到才去找AOF文件。



点击复制链接 与好友分享!回本站首页
上一篇:NoSQL概述
下一篇:spark中写hdfs的异常解决
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做实用的IT技术学习网站