赞
踩
RDB(Redis DataBase),其工作原理就是在指定的时间间隔,执行数据集的时间点快照,实现类似照片记录效果的方式。
换句话说,就是把某一时刻的数据和状态以文件的形式写到磁盘上,也就是快照。这样一来即使故障宕机,快照文件也不会丢失,数据的可靠性也就得到了保证。这个快照文件就称为RDB文件(dump.rdb)。
如果您需要在Redis停止工作时(例如断电后)将数据丢失的可能性降到最低,那么RDB并不好。您可以配置生成RDB的不同保存点(例如,在对数据集至少5分钟和100次写入之后,您可以有多个保存点)。但是,您通常会每五分钟或更长时间创建一次RDB快照,因此,如果Redis由于任何原因在没有正确关闭的情况下停止工作,您应该准备好丢失最新分钟的数据。
RDB需要经常fork()
以便使用子进程在磁盘上持久化。如果数据集很大,fork()
可能会很耗时,并且如果数据集很大并且CPU性能不是很好,可能会导致Redis停止为客户端服务几毫秒甚至一秒钟。
注:fork()
函数个人理解就是将主进程复制,创建一个与主进程完全相同的子进程
RDB个人理解就是每隔一定的时间就将目前Redis中的数据写到磁盘上,这样,即使Redis宕机,在重连后也可以继续加载数据。
这样的不足也很容易能想到:
save/bgsave
命令flushdb/fulshall
命令也会产生dump.rdb文件,但是也会将命令记录到dump.rdb文件中,恢复后依旧是空,无意义shutdown
且没有设置开启AOF持久化save \<seconds> \<changes>
:配置快照保存条件
dir
:配置快照保存目录地址
dbfilename
:配置快照的文件名
top-writes-on-bgsave-error
: 默认yes,如果配置成no,表示不在乎数据不一致或者有其他的手段发现和控制这种不一致,那么在快照写入失败时,也能确保redis继续接受新的请求
rdbcompression
:默认yes,对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,Redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能
rdbchecksum
:默认yes,在存储快照后,还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能
rdb-del-sync-files
:在没有持久化的情况下删除复制中使用的RDB文件。默认情况下no,此选项是禁用的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。