RDB 持久化
一、生成RDB
cmd:SAVE --阻塞进程,执行完,才能有效接收客户端命令。
cmd: BGSAVE --非阻塞,开启子进程保存。
客户端如果发送SAVE和BGSAVE命令直接拒绝。
BGWRITEAOF命令再BGSAVE执行完才能执行。
二、载入RDB
服务器启动时自动执行,检测到RDB文件就会自动加载。
如果开启AOF,优先使用执行AOF。
AOF关闭的情况下,才会执行RDB。
三、自动间隔性保存
save设置:一定条件后执行BGSAVE命令进行保存
默认设置:
save 900 1 //900秒内,进行一次修改,触发保存BGSAVE
save 300 1 //300秒内,10次修改,触发保存BGSAVE
save 60 10000 //60秒内,1w次修改,触发保存BGSAVE
struct saveparam { time_t seconds; //秒数 int changes;//变化次数 };
还有两个参数:
dirty --上次数据库触发保存命令修改数
lastsave -- 最后一次执行save时间
PORT_LONGLONG dirty; /* Changes to DB from the last save */
time_t lastsave; /* Unix time of last successful save */
还有一个定时器默认100毫秒来检测是否满足save条件的方法:serverCron
int serverCron(struct aeEventLoop *eventLoop, PORT_LONGLONG id, void *clientData)
四、RDB文件结构
| REDIS | db_version | database | EOF | check_sum |
RDB文件开头是REDIS,来判定是否是RDB文件。
db_version 版本号
databse 包含任意多个数据库(键值对)
EOF RDB文件结束标志
check_sum 校验长度