因为Redis服务器将数据存储在内存里面,而一旦服务器被关闭或者运行服务器的主机本身被关闭的话,存储在内存里面的数据就会消失不见;

如果我们仅仅是将redis用作缓存的话,那么这种数据丢失带来的问题并不是非常大,我们只需要重启机器,然后再次将数据放到缓存里面就可以了;

但如果我们将redis用作数据库的话,那么这种数据丢失就不能接受了。

一、RDB持久化原理

将服务器包含的所有数据库数据以二进制文件的形式保存到硬盘里面。

通过在服务器启动时载入RDB文件,服务器可以根据RDB文件的内容,还原服务器原有的数据库数据。

二、创建RDB文件
Redis服务器在什么时候创建RDB文件?
1) 服务器执行客户端发送的SAVE命令;(手动执行)
2) 服务器执行客户端发送的BGSAVE命令;(手动执行)
3) 使用save配置选项设置的自动保存条件被满足,服务器自动执行BGSAVE命令;(自动执行)

2.1 手动创建RDB文件之SAVE命令

通过使用客户端向服务器发送SAVE命令,可以命令服务器去创建一个新的RDB文件;

redis> SAVE
OK

在执行SAVE命令时过程中(也就是创建RDB文件的过程中),redis服务器将被阻塞,无法处理客户端发送的命令请求,只有在SAVE命令执行完毕后(也就是RDB文件创建完毕之后),服务器才会重新开始处理客户端发送的命令请求;如果RDB文件已经存在,那么服务器将使用新的RDB文件去替代旧的RDB文件。

SAVE命令的复杂度为O(N),N为服务器中所有数据库包含的键值对数量总和。

2.2手动创建RDB文件之BGSAVE命令

BGSAVE命令同样可以创建一个新的RDB文件,这个命令和SAVE命令的区别在于:BGSAVE不会造成redis服务器阻塞,在执行BGSAVE命令的过程中,redis服务器 仍然可以正常地处理其他客户端发送的命令请求。

BGSAVE是一个异步命令,发送命令的客户端立即得到回复,而实际的操作是在回复之后才开始;

redis> BGSAVE
Background saving started

BGSAVE命令的复杂度和SAVE一样,都是O(N),N为服务器中所有数据库包含的键值对数量总和。

BGSAVE不会造成阻塞的原因:
1) 当redis服务器 接收到BGSAVE命令时,它不会自己来创建RDB文件,而是通过fork()来生成一个子进程,然后由子进程负责创建RDB文件,而自己则继续处理客户端的命令请求;
2) 当子进程创建好RDB文件并退出时,它会向父进程(也就是负责处理命令请求的redis服务器)发送一个信号,告知它RDB文件已经创建完毕;
3) 最后redis服务器(父进程)接收到子进程创建的RDB文件,BGSAVE执行完毕;

BGSAVE执行过程:

SAVE和BGSAVE对比

注意:两者并没有谁好谁坏之分,各自适用于不同的场景。

2.3 自动创建RDB文件

以上介绍的SAVE和BGSAVE均需要手工介入。Redis服务器提供了自动进行RDB持久化操作,redis提供了save配置选项,通过这个选项,用户可以设置任意多个保存条件,每当保存条件中的任意一个被满足时,服务器就会自动执行BGSAVE命令。
save选项的格式:

save <seconds> <changes>

描述:如果距离上一次创建RDB文件已经过去seconds秒,并且服务器的所有数据库总共已经发生了不少于changes次修改(添加/删除/更新),那么执行BGSAVE。

示例:

save  

表示距离上一次创建RDB文件已经过去了300秒,并且服务器的所有数据库总共发生了不少于10次修改,那么执行BGSAVE命令;

save  

表示距离上一次创建RDB文件已经过去了60秒,并且服务器的所有数据库总共发生了不少于10000次修改,那么执行BGSAVE命令;

save
save
save

主要三个条件中的任意一个满足时,redis服务器就自动执行BGSAVE命令。

每次创建RDB文件之后,服务器为实现自动持久化而设置的时间计数器和次数计数器就会被清零,并重新开始计数,所以所个保存条件的效果是不会叠加的

Redis数据持久化之RDB持久化的更多相关文章

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

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

  2. Redis 详解 (六) RDB 持久化

    目录 1.RDB 简介 2.触发方式 ①.自动触发 ②.手动触发 3.恢复数据 4.停止 RDB 持久化 5.RDB 的优势和劣势 6.RDB 自动保存的原理  前面我们说过,Redis 相对于 Me ...

  3. [Redis] redis数据备份恢复与持久化

    数据库备份,使用save命令,将会在redis的安装目录中生成dump.rdb 例如:在我的目录下 redis/src/dump.rdb 使用命令config get dir,获取当前redis的安装 ...

  4. Redis数据持久化、数据备份、数据的故障恢复

    1.redis持久化的意义----redis故障恢复 在实际的生产环境中,很可能会遇到redis突然挂掉的情况,比如redis的进程死掉了.电缆被施工队挖了(支付宝例子)等等,总之一定会遇到各种奇葩的 ...

  5. Redis持久化之RDB&&AOF的区别

    在说Redis持久化之前,需要搞明白什么是数据库状态这个概念,因为持久化的就是将内存中的数据库状态保存到磁盘上.那么什么是数据库状态呢?Redis是一个key-value数据库服务器,一般默认是有16 ...

  6. 【Redis】Redis学习(七) Redis 持久化之RDB和AOF

    Redis 持久化提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF ...

  7. redis——持久化方式RDB与AOF分析

    https://blog.csdn.net/u014229282/article/details/81121214 redis两种持久化的方式 RDB持久化可以在指定的时间间隔内生成数据集的时间点快照 ...

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

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

  9. Redis实现之RDB持久化(一)

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

随机推荐

  1. javassist AOP

    对于AOP,这个概念,不用解释,主要用途很多,我这里主要是为了后续研究如何实现APM做准备.前面研究了动态代理实现AOP,考虑到性能的问题,改用javassist直接修改直接码实现! javassis ...

  2. java mail使用中遇到的550类型错误

    前言 首先,需要说明的是,本错误来自于一个简单的基于java mail的api程序,邮件服务器是163的SMTP,即smtp.163.com. 程序 需要说明一下,下面这个程序,是来自于网络上,本人为 ...

  3. MongoDB备份与导入

    导出mongodb的数据 mongodump -d nodes -o url 导入mongodb数据mongorestore --db nodes url 删除mongodb的数据库db.dropDa ...

  4. UI-UIImageView和Image的区别

    1.UIImageView图片视图控件 继承于UIView 用于显示图片在应用程序中 2.UIImage 是将真实图片文件转化为程序中的图片,然后3.UIImageView是Image的载体,负责显示 ...

  5. 04文件与IO

    文件系统调用: open.close.create.read.write open: int open(const char* path, int flags) path:要打开的文件的路径 flag ...

  6. 【jmeter】元件的作用域与执行顺序

    1.元件的作用域 JMeter中共有8类可被执行的元件(测试计划与线程组不属于元件),这些元件中,取样器是典型的不与其它元件发生交互作用的元件,逻辑控制器只对其子节点的取样器有效,而其它元件(conf ...

  7. Shiro权限控制框架

    Subject:主体,可以看到主体可以是任何可以与应用交互的"用户": SecurityManager:相当于SpringMVC中的DispatcherServlet或者Strut ...

  8. Redis应用案例,查找某个值的范围(转)

    本文来自Redis在Google Group上的一个问题,有一位同学发贴求助,说要解决如下的一个问题:他有一个IP范围对应地址的列表,现在需要给出一个IP的情况下,迅速的查找到这个IP在哪个范围,也就 ...

  9. jetty-run运行报错的原因

  10. Hibernate第一个程序

    1. 下载资源:www.hibernate.org 2. 资源介绍hibernate-release-4.3.10.Final a) Documentation  相关文档 b) Lib 相关jar包 ...