redis种rdb,aof2种备份介绍

redis

提到高并发我们就离不开nginx和redis这2个利器,可以说它们就是南乔峰,北慕容。下面主要说说redis,说说它的2种备份方式。


RDB和AOF是redis内置的2种备份方式。


RDB-Redis Database 的缩写,见名思意,就是对数据库进行快照,保存数据库的数据的当前的状态。比如有个name的键,它的值从menghuiguli变成fujia变成dreamfly,RDB只会保存dreamfly这个值,就是它保存的是当时的数据库的状态,之前的状态它不会关心。


AOF-Append Only File的缩写,就是拼接到文件,可能大家不太明白什么意思,简单介绍下,就是每次对数据库的操作都会写入文件,然后回复的时候,依次执行这些操作,数据库就会恢复到备份的状态。还是上面的例子。我们会保留着set name menghuiguli  set name fujia  set name dreamfly这三个语句,然后恢复的时候,依次执行这些命令,数据name的值就会恢复到dreamfly.


为什么会有2个种备份方式,肯定是它们各有自己的优缺点。RDB保存数据库整个数据,如果数据量很大的时候,备份就需要很大的内存空间来进行操作。但是RDB还原非常方便,直接将数组加载到内存就恢复了。AOF备份只操作写记录,基本不占用内存,消耗非常小,缺点就是恢复的时候,需要将所有的操作都执行一遍,可能需要一定时间。


但是AOF如果过大的时候怎么办?redis的作者当然也想到了。那就是进行一定的压缩,"AOF重写"。比如上面的三个操作可能只保存最后一个语句,因为那是name的最后值。


redis是单线程的,如果进行备份显然会阻塞进程操作,怎么办?redis做的就是fork一个子进程进行备份,主进程进行命令操作。


上面只是简单介绍了一下,具体的还有很多内容需要深入研究,个人推荐阅读《Redis设计与实现》,非常好的一本书,从redis底层数据结构讲起,将redis的来世今生讲的很清楚。redis的多种数据结构,备份,分布式都将的很详细。


梦回故里手札