Redis支持RDB和AOF两种持久化机制
1、RDB(Redis DataBase)
- 是对命令的全量快照
- 随着key的数量增大,那么写入磁盘的开销也会越来越大
2、RDB文件的生成是否会阻塞主线程
save: 使用save的方式会阻塞主线程,影响redis的性能
bgsave: 一般情况下不会阻塞主线程,原因是会创建一个子进程,单独取创建一个RDB的dump文件,是默认配置。
上图中的配置,后台使用的bgsave命令,save只是一个摆设。
3、bgsave为啥不阻塞主线程?
另外,shutdown也会开启save操作。
and, 从节点执行的全量复制操作,这个时候主节点自动执行bgsave,生成一个RDB文件发给从节点。从节点拿到文件开始全量复制。
4、快照的时候修改key的影响?
- 在进行bgsave的时候,是可以对key进行修改的。
- 在主线程fork一个子进程进行快照的时候,在bgsave命令执行后,如果对key进行修改,那么写时复制的值是旧值,那么从节点拿到的数据就是旧的数据,与主节点key不一致.
RDB导致的数据丢失问题
主线程在fork的时候,会导致阻塞.因此RDB的方式还是有很大的缺陷
5、AOF (append only file)
-
配置文件中开启aof
注意:读命令不会写入AOF。 -
AOF的工作流程