Redis-RDB持久化
一. RDB持久化的原理
RDB持久化是把当前进程数据生成快照保存到硬盘中的过程。
二. RDB持久化的触发机制
2.1 手动触发RDB
手动触发RDB的方式有两种,分别是save命令和bgsave命令
2.1.1 save命令触发RDB
Save命令将阻塞当前Redis服务器,直到RDB过程完成为止,对于内存比较大的实例会造成长时间阻塞,线上环境不建议使用
执save命令后对应的redis日志如下:
*DB saved on disk
2.1.2 bgsave命令触发RDB
Redis进程执行fork操作创建子进程,rdb操作由子进程完成,完成后自动结束。阻塞只发生在fork阶段,时间很短。
Redis内部所有涉及RDB的操作都由bgsave命令来完成。Save命令由于会阻塞redis进程已经被废弃。
执行bgsave后对应的redis日志:
27206:M 18 Jul 16:35:56.882 * Backgroundsaving started by pid 28214
28214:C 18 Jul 16:35:56.884 * DB saved ondisk
28214:C 18 Jul 16:35:56.885 * RDB: 0 MB ofmemory used by copy-on-write
27206:M 18 Jul 16:35:56.936 * Backgroundsaving terminated with success
2.2 自动触发
除了执行命令手动触发之外,Redis内部还存在自动触发RDB持久化机制,例如以下场景:
(1) 使用save相关配置,如save m n,表示m秒内数据集存在n次修改时,自动触发rdb
例如:
10.3.34.101:6378> config set save "10 1 300 10 6010000"
OK
10.3.34.101:6378> set bbbbb cccccc
OK
Redis.log中观察日志
27206:M 18 Jul 17:05:49.235 * 1 changes in 10 seconds. Saving...
27206:M 18 Jul 17:05:49.235 * Background saving started by pid 31273
31273:C 18 Jul 17:05:49.238 * DB saved on disk
31273:C 18 Jul 17:05:49.238 * RDB: 0 MB of mem