再水一篇博文吧,把Redis凑够一个系列了。文章内容主要来自于以下两篇,和Redis的默认配置文件,我把两篇内容集中一下,也可以直接去看原文。

redis 数据持久化 – 思齐cnblogs

Redis作者:深度剖析Redis持久化

其中主要讲解了一些Redis的数据持久化的做法,它是如何持久化的。对于原理和代码基本没有,不过对于一般使用者来讲了解的够用了。首先,Redis存在有两种持久化策略:RDB快照和AOF日志。

1、RDB快照

Redis支持将当前数据的快照存成一个数据文件的持久化机制。而一个持续写入的数据库如何生成快照呢。Redis借助了fork命令的copy on write机制。在生成快照时,将当前进程fork出一个子进程,然后在子进程中循环所有的数据,将数据写成为RDB文件。

可以手工调用SAVEBGSAVE命令。

在配置文件中,相关的有一些选项:

默认是这三个配置,其中第一条的意思是每900秒,当超过1个key改变,就执行save命令保存。其可靠性可以从前面的保存规则看出来,数据库挂掉以后数据的完整性取决于你的配置。

这一项是数据文件的保存目录。

数据文件保存的文件名。

2、AOF日志

AOF日志的全称是Append Only File,从名字上我们就能看出来,它是一个追加写入的日志文件。与一般数据库不同的是,AOF文件是可识别的纯文本,它的内容就是一个个的Redis标准命令。

将上面的选项设置为yes,打开AOF模式。在Redis中对AOF调用write写入后,何时再调用fsync将其写到磁盘上,通过appendfsync选项来控制,下面appendfsync的三个设置项,安全强度逐渐变强。

当设置appendfsync为no的时候,Redis不会主动调用fsync去将AOF日志内容同步到磁盘,所以这一切就完全依赖于操作系统的调试了。对大多数Linux操作系统,是每30秒进行一次fsync,将缓冲区中的数据写到磁盘上。

通常情况下,这个设置是每秒写入文件一次,最坏情况下是每2秒写入。这也是官方推荐的方式。

当设置appendfsync为always时,每一次写操作都会调用一次fsync,这时数据是最安全的,当然,由于每次都会执行fsync,所以其性能也会受到影响。

AOF重写

对于AOF文件,保存的是日志,所以必然存在对某一个key的多个操作都被写进了这个文件里面,那AOF肯定就会变得很大,所以Redis又提供了一个功能,叫做AOF rewrite。其功能就是重新生成一份AOF文件,新的AOF文件中一条记录的操作只会有一次,而不像一份老文件那样,可能记录了对同一个值的多次操作。

手动使用命令 BGREWRITEAOF 来对AOF文件重写。

最后推荐看Redis作者的文章,讲的比较详细。

(话说最近好像老特么搞这种安装配置的玩意了……要抓紧提高Coding啊……)

 

最后再推荐篇关于Redis的文章,作者是微博的架构师:Redis几个认识误区

——EOF——