用途
数据快照,可以定期保存
使用
save:不fork,阻塞服务器,期间不处理client请求,不推荐
bgsave:子进程save,请求正常
相关命令
save, bgsave, bgrewriteaof,不能同时执行
自动执行
save duration updates
save 900 10000
在900s以内有10000次更新就执行bgsave
typedef struct saveparan {
time_t seconds;
int changes;
}
状态保存
typedef struct redisServer {
long long dirty;//上次bgsave以后有多少次update
time_t lastSave;//bgsave 成功时间
}
状态是保存在redis server的,各个db共享
serverCron
redis内部的定时任务,大概100ms就会执行一次,注意是与client请求互斥的,redis保持对db的修改单线程
RDB文件结构
REDIS|db_version|databases|EOF|check_sum
REDIS: redis 标识
db_version:是指rdb的版本,不是redis服务器的版本
database
SELECTDB|db_num|kv_pairs
SELECTDB 开始的标志符
kv是自解释的,跟pb很相像啊
kv_pairs
type| kay | value
有过期的情况
EXPIRETIME_MS|ms|type|key|value
工具
redis-check-dump
redis-check-aof
引申
嵌套的kv很有用啊,pb就是这个思路的,比如我们要设计一个tree的序列化和反序列化,就可以用tlv
t: NODE,LEFT,RIGHT