上一篇我们讲解了redis持久化的RDB方式,对于两个保存点之间的数据可能丢失的情况,我们今天讲解的另外一种redis持久化的方式AOF可以弥补。
工作原理:
就是将执行的每一条命令写到文本文件中。这样速度是不是又下来了啊。
配置:
appendonly no # 是否打开 aof日志功能
写入的频率:
appendfsync always # 每1个命令,都立即同步到aof. 安全,速度慢
appendfsync everysec # 折衷方案,每秒写1次
appendfsync no # 写入工作交给操作系统,由操作系统判断缓冲区大小,统一写入到aof. 同步频率低,速度快,
no-appendfsync-on-rewrite yes: # 正在导出rdb快照的过程中,要不要停止同步aof
auto-aof-rewrite-percentage 100 #aof文件大小比起上次重写时的大小,增长率100%时,重写
auto-aof-rewrite-min-size 64mb #aof文件,至少超过64M时,
问题:
每一个命令都写到了aof中这样大大降低了我们的写入速度。我们在对于一个key 操作100次的时候,这个key最总只有一个具体的值,但是aof确有一百多条的记录,来记录我们每次key的变更,这样文件会变得很大,同时当我们拿着这个AOF来回复数据的时候,就比较傻了,会对于一个key来回操作100多次,这样和麻烦。
重写
为此redis提供了重写的方式,Redis提供了bgrewriteaof命令。收到此命令后Redis将使用与快照类似的方式将内存中的数据以命令的方式保存到临时文件中,最后替换原来的文件,以此来实现控制AOF文件的合并重写。由于是模拟快照的过程,因此在重写AOF文件时并没有读取旧的AOF文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的AOF文件。
redis持久化这一块我只是简单的简绍了一下,如果想深入的了解可以参考:
http://www.cnblogs.com/zhoujinyi/archive/2013/05/26/3098508.html