Redis快照持久的意思就是将内存的数据导出到硬盘中,做到持久化。因为导出的是二进制文件,所以恢复速度快。
Reids服务一般有三个进程,一个就是redis-server,负责响应客户端的请求,一个是rdb进程了,负责数据的快照持久。还有一个是aof进程(下篇会讲到)。
rdb服务的一些参数配置在redis安装目录下的redis.conf中。
主要有以下配置:
save 900 1 #刷新快照到硬盘中,必须满足两者要求才会触发,即900秒之后至少1个关键字发生变化。
save 300 10 #必须是300秒之后至少10个关键字发生变化。
save 60 10000 #必须是60秒之后至少10000个关键字发生变化。
从下往上看,持久化的限制条件越来越松,当然,如果你只想做缓存,不作持久化,你可以注释这几行。(如果要做测试,可以在redis安装目录bin目录下的redis-benchmark命令来做测试,如redis-benchmark -n 10000则是产生一万条redis命令)
stop-writes-on-bgsave-error yes #后台存储错误停止写。
因为redis-server和rdb是两个进程,所以如果当redis在持久化时突然出错,这个时候你还在做写操作,那么肯定会导致真实数据和持久化的数据不一致,为了防止这种情况,当持久化出错的时候停止写操作,保证数据一致性。
rdbcompression yes #使用LZF压缩rdb文件。
rdbchecksum yes #存储和加载rdb文件时校验。
dbfilename dump.rdb #设置rdb文件名。
dir ./ #设置工作目录,rdb文件会写入该目录。
这个就是redis快照持久化的一些基本配置。接下去我们说一下redis rdb持久化的一些缺点。
上面这个图中竖线表示的就是redis满足rdb配置,正在做持久化。举个例子,每间隔一分钟,redis满足条件,做持久化,将数据导出到磁盘中。比如3分钟的时候导出,4分钟的时候导出,而恰恰在3~4分钟之间服务器断电了,那么3~4分钟之间的数据岂不是没有做持久化,都没有了。所以说这个就是redis rdb快照持久化的一个缺点。不过在redis2.4版本后新增了aof日志持久化来解决这个问题,下一篇我们就来说说aof。