RDB是基于快照的持久化方式,也就是把数据按照一定的格式转化为二进制格式,存在磁盘上,之后可以根据这个快照文件恢复数据。
关于RDB有两个命令一个是SAVE,这是阻塞式的,服务端只有执行完持久化才会接受并处理新的请求,在此期间,其余的请求只能等待。另一个是BGSAVE,服务端会fork一个进程来做持久化,之后仍然可以处理其他的请求,所以是非阻塞式的。
RDB文件的格式如下:
REDIS表明该文件是redis的文件,接着是版本号,后面是数据库的内容,eof是结束符,check_sum是校验和,只有从前面部分计算的和与该值相等时,redis才会加载文件,否则认为损坏。
databases包括所有的数据库,每一个域对应一个数据库,内部结构如下:
db_number表明数据库的编号,后面是键值对,每一个键值对格式如下:
前两个代表过期时间,如果有的话。之后是类型,key以及对应的值。