redis数据库之rdb持久化

本文介绍了Redis的RDB持久化机制,包括RDB文件格式、数据保存过程及rdbSave函数的工作原理。RDB通过在内存中创建快照来持久化数据,bgsave命令在不影响服务器正常工作的情况下进行数据持久化。文章详细解析了RDB文件的组成部分,如REDIS标识、RDB-VERSION、SELECT-DB、KEY-VALUE-PAIRS等,并讨论了rdbSaveKeyValuePair和rdbSave的重要函数。Redis的定时RDB持久化是通过serverCron函数实现的。
摘要由CSDN通过智能技术生成

redis是一种内存数据库,也就是redis的数据在正常工作的情况下都是存储在内存中。但并不是说redis只能把数据存储在内存中,redis提供了两种数据持久化机制:rdb和aof。rdb持久化有三种方式被启动:用户向redis发送save或者bgsave命令。save和bgsave的不同就在于save会阻塞redis服务器,而bgsave不会。这样bgsave就在不影响redis服务器正常工作的情况进行数据持久化,bgsave主要是通过子进程来进行数据持久化。无论是save还是bgsave最后都会通过调用rdbsave来进行保存操作。

在讲解rdbsave这个函数之前,先来介绍下rdb文件格式。一个rdb文件分为以下几个部分:


REDIS:文件的最开头保存着REDIS 五个字符,标识着一个RDB 文件的开始。

RDB-VERSION:一个四字节长的以字符表示的整数,记录了该文件所使用的RDB 版本号。目前的RDB 文件版本为0006 。

SELECT-DB:这域保存着跟在后面的键值对所属的数据库号码。在读入RDB 文件时,程序会根据这个域的值来切换数据库,确保数据被还原到正确的数据库上。

KEY-VALUE-PAIRS:每个键值对的数据使用以下结构来保存:


OPTIONAL-EXPIRE-TIME:,如果键没有设置过期时间,那么这个域就不会出现;反之,如果这个域出现的话,那么它记录着键的过期时间

KEY:保存着键,格式和REDIS_ENCODING_RAW 编码的字符串对象一样

TYPE-OF-VALUE:记录着VALUE 域的值所使用的编码,根据这个域的指示,程序会使用不同的方式来保存和读取VALUE 的值。

VALUE:保存着真实的值,但是这个被保存的值会被进行各种编码。(可以查看redis设计与实现)

关于rdb文件格式还可以参考博客:http://www.searchdatabase.com.cn/showcontent_59162.htm

下面来正式看下rdbsave函数:

int rdbSave(char *filename) 
{
......
// 以 "temp-<pid>.rdb" 格式创建临时文件名
    snprintf(tmpfile,256,"temp-%d.rdb", (int) getpid());
    fp = fopen(tmpfile,"w");
......
snprintf(magic,sizeof(magic),"REDIS%04d",REDIS_RDB_VERSION);
    if (rdbWriteRaw(&rdb,magic,9) ==
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值