redis的rdb持久化过程
流程图就想表达两点:
1.主进程会fork一个子进程,子进程共享主进程内存数据(fork其实是复制页表),子进程读取数据并写到新的rdb文件,最后替换旧的rdb文件。
2.在持久化过程中主进程接收到用户写操作,会复制一份数据副本,读写操作在数据副本中进行,因此在配置maxmemory的大小时应该合理,预留足够的物理内存,以免rdb过程有写操作的这种情况而导致内存不足出现异常
redis.conf中rdb持久化机制默认配置
#是否在将rdb文件持久化到磁盘时,进行压缩操作。设置为 "yes"
#可以提高数据安全性,但可能会降低性能。默认为 "no"。
rdbcompression yes
#rdb文件名
dbfilename rdb_dump.rdb
#rdb持久化,快照可以用一个空字符串参数完全禁用:save “”
#在900秒(15分钟)内,如果有至少1个键被改变,则bgsave进行RDB持久化
#在300秒(5分钟)内,如果有至少10个键被改变,则bgsave进行RDB持久化
#在60秒内,如果有至少10000个键被改变,则bgsave进行RDB持久化
save 900 1
save 300 10
save 60 10000
什么时候会促发rdb持久化
1.手动执行save,bgsave命令的时候
2.redis进程退出之前会进行持久化
3.对key的操作符合redis.conf中配置的促发条件
rdb持久化机制优点
1:rdb文件保存的是二进制数据,在恢复大数据集时速度比aof的快
rdb持久化机制缺点
1.rdb时间比较长,两次rdb之间存在数据丢失风险
2.数据量大时,fork子进程,压缩,写rdb文件耗时都比较长