AOF和RDB是什么
Redis进行操作时,有两种方式将操作的结果保存下来。一种是将结果以快照的方式保存在二进制文件中(默认叫:dump.rdb* ),这就是RDB模式,另一种是将操作的命令追加到一个记录文件里(默认叫:appendonly.aof),然后通过重新执行这些命令来重建数据库。通常,不用修改这些,按默认的来就好了,但是,了解一下还是有好处的,说不定面试就问这个呢?
RDB模式
在redis里,默认使用RDB模式。因为RDB模式重建数据库比较快。
这里的 重建数据库 是指将数据从硬盘移到内存,并建立起数据库的过程。对于RDB模式来说,就是把 dump.rdb 文件加载到内存,并解压字符串,就建立起了数据库。而对于AOF模式来说,则是在启动Redis服务器的时候,运行appendonly.aof日志文件,在内存中重新建立数据库。从这里的描述就可以看出,AOF的重建过程是要比RDB慢的。
使用RDB模式的话,系统会将内存中数据库的快照每隔一段时间间隔更新到硬盘中(dump.rdb 文件里),这个更新的频率是可以指定的。在redis.conf中有三个配置用来指定内存数据更新到硬盘的频率:
//格式是:save <seconds> <changes>
save 900 1 //如果仅有1-9次更改操作,那么要900s才写入硬盘一次
save 300 10 //如果仅有10-9999次更改操作,那么要300s才写入硬盘一次
save 60 10000 //如果超过10000次更改操作,那么60s才会写入硬盘一次
900s,也就是15分钟,300s,就是5分钟。这个时间挺长的,这正是RDB模式的缺点所在——如果服务器宕机的话,可能会造成最后几分钟,保存在内存中还来不及刷入硬盘的数据丢失。如果数据很重要那就惨了。
但是,如果数据不是那么重要,丢失几分钟数据也没什么关系,那么RDB模式是最好的选择。
AOF模式
使用AOF模式是将操作日志记在appendonly.aof 文件里,每次启动服务器就会运行appendonly.aof 里的命令重新建立数据库。因为要重新运行命令,所以appendonly.aof 是比较慢的。所以,默认AOF模式是关闭的。你可以在redis.conf 文件里配置,使用appendonly yes
打开AOF模式。
AOF模式有三种追加到appendonly.aof 的方式,用来指定什么时机可以将操作日志追加到appendonly.aof 文件里。它们分别是:
方式 | 说明 |
---|---|
always | 每次执行写操作时都将操作记录追加到日志,安全,但比较慢 |
everysec | 每秒钟将操作记录追加到日志,系统默认的方式,是一种权衡折衷,通常这种方式会比较好 |
no | 让操作系统去决定什么时候追加,也许当操作系统有空的时候,速度快 |
相较于RDB,AOF模式是比较安全的,即使服务器宕机,丢失的数据也最多是一秒两秒的。所以,如果数据对安全性要求很高,那么用AOF吧。
另外,你可以同时指定这两种方式,运行的时候,它们各自按自己的方式办事,不冲突。但是启动的时候,是按AOF模式启动的,也就是运行appendonly.aof 文件。
这些东西,都是从redis.conf搬出来的,推荐去看一下,文件也不长,一共才490行,可以体会一下原汁原味的知识。
AOF模式和RDB模式对比
RDB使用快照的方式进行持久化,这种方式生成的文件结构比较紧密,比较节省空间,而且恢复恢复的时候比AOF文件快。但是因为要做快照,这种方式对redis服务影响较大,所以生成RDB的频率不会太快,一般几分钟才做一次,所以服务器宕机的话,可能会丢失几分钟的信息。
AOF使用日志的方式进行持久化,这种方式生成的文件较大,恢复的时候也较慢,但是对redis服务影响较小,所以刷新AOF文件的频率可以较快,一般都是秒级别的,若服务器宕机,丢失的数据也少。