redis是一个内存数据库,所有我们需要将他定时存在磁盘上,如果没有开启AOF,那么会生成RDB文件进行存储,其实就是个二进制文件

RBD文件通过SAVE BGSAVE进行创建,

SAVE会阻塞服务器进程,如果执行的话,那么client在这个期间发出的请求都不会响应

BGSAVE其实是创建fork出一个子进程来执行,其实本质他们都是在实行rdbsave

因为AOF的频率比RDB的频率高,所以启动服务器的时候,我们遵循着下面的原则

如果执行BGSAVE的时候,收到了save会被拒绝,因为他们都是执行rdbsave,两个进程同时进行的话会产生竞争

如果发出了BGREWRIEAOF的话,那么会等到BGSAVE执行完了在执行。相反的话会被拒绝,两个不可能同时进行,如果同时进行,会进行大量的写入磁盘操作

间隔性保存

struct redisserver{

  saveparam

  long long dirty

  time_t lastsave

}

上述三个其实表示了执行BGSAVE的条件

saveparam就是指向的条件

eg:

save 300 1 300秒内执行一次

dirty表示上一次bgsave结束后执行了多少次操作

lastsave表示的上面bgsave的时间戳

通过计算并且循环判断就是可以确定是否需要执行BGSAVE

REDIS服务器会每隔100毫秒执行依稀,servercron函数,就是检查这个条件

RDB文件结构:

第一个大写的常亮,表示读的是RDBle,version是版本,EOF是数据库读完的结束标志,check_sum是一个效验码

中间的是各个数据库中的数据

上面表示的每一个数据库中的数据,主要是keyvaluepairs

上面就是两种带过期键和不带的两种结构

对于key其实就是一个字符串,对于value

(1)如果大于20字节,那么就会以压缩的方式存储,如果不是,那么会按原样存储

无压缩的结构和压缩的结构如下

对于其他的比如列表对象,集合,有序集合,哈希,都会在最前有一个总的长度,对于值,如果是字符串的话,还会在前面有一个length的记录

RDB持久化的更多相关文章

  1. 深入剖析 redis RDB 持久化策略

    简介 redis 持久化 RDB.AOF redis 提供两种持久化方式:RDB 和 AOF.redis 允许两者结合,也允许两者同时关闭. RDB 可以定时备份内存中的数据集.服务器启动的时候,可以 ...

  2. Redis数据持久化之RDB持久化

    因为Redis服务器将数据存储在内存里面,而一旦服务器被关闭或者运行服务器的主机本身被关闭的话,存储在内存里面的数据就会消失不见: 如果我们仅仅是将redis用作缓存的话,那么这种数据丢失带来的问题并 ...

  3. 第二部分之RDB持久化(第十章)

    RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状态.(数据库状态:服务器中的非空数据库以及它们的键值对统称为数据库状态) 一.RDB文件的创建 ...

  4. 第10章 RDB持久化

    Redis是一种内存数据库,掉电即失,为了解决这个问题Redis提供了RDB持久化功能,该功能可以把Redis中的内容以RDB文件的形式存储在硬盘上,并且每次RedisServer启动的时候都会尝试从 ...

  5. Redis详解(六)------ RDB 持久化

     前面我们说过,Redis 相对于 Memcache 等其他的缓存产品,有一个比较明显的优势就是 Redis 不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,has ...

  6. 使用AOF持久化文件实现还原Redis数据库并得到RDB持久化文件

    目录 1 编写本文的初衷 2 具体实施 2.1 Redis持久化概念简介 2.2 获取指定Redis的AOF持久化文件 2.3 把Redis的持久化AOF文件转换为RDB文件 1 编写本文的初衷 因为 ...

  7. redis之RDB持久化与AOF持久化

    Redis是一个键值对数据库服务器,服务器中通常包含着任意个非空数据库,而每个非空数据库中又可以包含任意个键值对,为了方便起见,我们将服务器中的非空数据库以及它们的键值对统称为数据库状态. 因为Red ...

  8. redis 笔记03 RDB 持久化、AOF持久化、事件、客户端

    RDB 持久化 1. RDB文件用于保存和还原Redis服务器所有数据库中的所有键值对数据. 2. SAVE命令由服务器进程直接执行保存操作,所以该命令会阻塞服务器. 3. BGSAVE由子进程执行保 ...

  9. 《Redis设计与实现》- RDB持久化

    Redis RDB持久化功能可以将Redis内存中的数据库状态保存到磁盘里面,避免数据意外丢失. 1. 手动生成 RDB 文件 有两个Redis命令可以用于生成RDB文件: SAVE,该命令会阻塞Re ...

  10. redis系列:RDB持久化与AOF持久化

    前言 什么是持久化? 持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘).持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中.XML数 ...

随机推荐

  1. Android-第三天

    今天开始做一个提交的页面,本来是用LinearLayout,但是这种布局要使用到多组LinearLayout,于是采用表格布局+相对布局的方式. <TableLayout> <Tab ...

  2. linux 保留内核中sas驱动的加载导致crash问题

    [root@localhost ~]# uname -a Linux localhost.localdomain -.el7.x86_64 问题描述,在crash的时候,小内核因为分配中断号失败而触发 ...

  3. ASP.NET MVC5 中百度ueditor富文本编辑器的使用

    随着网站信息发布内容越来越多,越来越重视美观,富文本编辑就是不可缺少的了,众多编辑器比较后我选了百度的ueditor富文本编辑器. 百度ueditor富文本编辑器分为两种一种是完全版的ueditor, ...

  4. 使用Botkit和Rasa NLU构建智能聊天机器人

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 我们每天都会听到关于有能力涉及旅游.社交.法律​​.支持.销售等领域的新型机器人推出的新闻.根据我最后一次查阅的数据,单单Facebook Me ...

  5. linux mysql下忘记root密码解决办法

    1 修改MySQL的登录设置 # vi /etc/my.cnf 在[mysqld]的中加上一句:skip-grant-tables  2 重新启动mysqld # /etc/init.d/mysqld ...

  6. impala集成sentry

    1.安装配置sentry 详细步骤见上一篇安装配置sentry. 2.配置impala 注:以下配置未集成kerberos安全认证 在/etc/imapla/conf目录下创建sentry-site. ...

  7. duilib消息类型

    //定义所有消息类型 ////////////////////////////////////////////////////////////////////////// #define DUI_MS ...

  8. tomcat安装自制作ssl证书

    1.执行命令 C:\servers\apache-tomcat-8.0.27>keytool -genkey -alias tomcat -keyalg RSA -keypass pass123 ...

  9. Web Application和Web Site两个模板的比较

    Scenario Web Application Project Web Site Project 项目定义 跟 Visual Studio .NET 2003 类似,由于项目文件的存在,只有被项目文 ...

  10. js点击图片查看大图,并可以拖动,且滚动滑轮放大缩小

    方法一:此方法在页面没有滚动条时无法缩放 JQuery function hideMax(){ $(".MAX_div").remove(); $("#Cover_Div ...