2016-12-22 13:58:48


该系列文章链接
NoSQL 数据库简介
Redis的安装及及一些杂项基础知识
Redis 的常用五大数据类型(key,string,hash,list,set,zset)
Redis 配置文件介绍
Redis 持久化之RDB
Redis 持久化之AOF
Redis 主从复制
Redis 事务
Redis 发布与订阅
Redis jdedis 介绍


redis 作为缓存的优秀数据库,也提供了将缓存中的数据写入到硬盘的手段。
有两种:一种是 RDB,另一种则是 AOF,本篇文章介绍 RDB。

1.RDB 简介
RDB:redis database
定义:在指定的时间间隔内将内存中的数据集快照写入到硬盘中,也就是 snapshot 快照,它恢复时是将快照文件直接读取到内存中

2.RDB 持久化过程
简单来说,就是 redis 会单独创建(fork)一个子进程来进行持久化,先将数据写入到硬盘中的一个临时文件中,等到持久化过程结束,就用这个临时文件替换上次持久化好的文件。
整个过程中,主进程不进行任何与之相关的IO操作,这就确保了 redis 的极高性能
那么:什么叫 fork?
redis 会复制一个与当前进程一样的进程。新进程的所有数据(eg:程序计数器)数值都和原进程一致,但是是一个全新的进程,并作为原进程的子进程

3.RDB 在 redis.conf 的配置
RDB 在 redis.conf 中的模块是 snapshotting。
下面简单介绍下 snapshotting
    3.1 save
        将数据库保存在磁盘上:

save <seconds> <changes>

如果同时发生了给定的秒数和针对DB的给定写入操作数,则将保存数据库。

在下面的示例中,出现这些情况将会保存:
            在900秒(15分钟)内至少改变了1个 key
            在300秒(5分钟)内至少改变了10个 key
            在60秒内至少改变了10000个 key

注意:您可以通过注释掉所有"save"行来完全禁用保存。

也可以通过添加带有单个空字符串参数的save指令来删除所有先前配置的保存点,如下例所示:
              save ""

3.2 stop-writes-on-bgsave-error
        默认情况下,如果启用了RDB快照(至少一个保存点)并且最新的后台保存失败,Redis将停止接受写入命令。
        这将使用户意识到(以一种困难的方式)数据没有正确地保存在磁盘上,否则很可能没有人会注意到以至于会发生一些灾难。

如果后台保存过程将再次开始工作,Redis将会自动允许再次写入。

然而,如果您已设置对Redis服务器和持久性的正确监视,则可能需要禁用此功能,以便即使磁盘,权限等存在问题,Redis也将继续正常工作。

3.3 rdbcompression
        数据库在 dumb.rdb 文件保存数据时使用LZF压缩字符串对象?
         默认设置为“yes”,因为它几乎总是一个胜利。
         如果要在保存子项中保存一些CPU,请将其设置为“no”,但如果您具有可压缩值或键,则数据集可能会更大。
         (在业界这个一般设置为 no,因为很多程序员认为不需要给老板省硬盘空间,毕竟在多买个硬盘就好了。空间换时间!)
    3.4 rdbchecksum
        RDB的第5版开始,CRC64校验和位于文件的末尾。
         这使得格式更能抵抗损坏,但在保存和加载RDB文件时有一定的性能损失(大约10%),因此您可以禁用它以获得最佳性能。

禁用校验和创建的RDB文件的校验和为零,将告诉加载代码跳过检查。

3.5dbfilename
        RDB方式保存数据的文件名

3.6 dir
        工作目录。

数据将使用'dbfilename'配置指令指定的文件名写入此目录
        
        aof 文件也将被创建在此目录中。
        
        请注意,您必须在此处指定目录,而不是文件名。

4.如何触发或停止 RDB
    触发 RDB 有很多种方式:
        4.1 在 redis.conf -> save 中写下触发的条件
            然后满足此条件会自动以 RDB 方式持久化

4.2 使用 save 或者 bgsave 命令主动触发快照
            save: save 只管保存,其它所有读写操作都会阻塞
            bgsave: redis 会在后台异步时进行快照操作,快照同时可以响应客户端请求,也可以通过 lastsave 命令获取最后一次成功执行快照的时间

4.3 执行 flushall 命令,这没有什么意义

动态停止 RDB 保存规则方法:
        redis-cli config set save ""

5.反持久化:将 RDB 的数据还原到内存中
    
    config get dir 获取存储数据的目录

将备份文件 dump.rdb 移动到 redis 安装目录并启动服务即可

6.RDB 的优势与劣势
    6.1 优势
        适合大规模的数据恢复
        对数据完整性和一致性要求不高

6.2 劣势
        在一定时间间隔内做一次备份,所以如果 redis 出现意外的话,就会丢失最后一次的所有修改
        fork 父进程的时候,父进程内存中的数据被克隆了一份,大致 2 倍的膨胀率需要考虑

5-Redis 的持久化之 RDB的更多相关文章

  1. Redis:持久化之RDB和AOF

    Redis:持久化之RDB和AOF RDB(Redis DataBase) 在指定的时间间隔内将内存中的数据集快照写入硬盘 也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里. R ...

  2. redis的持久化之RDB的配置和原理

    Redis优秀的性能是由于其将所有的数据都存储在内存中,同样memcached也是这样做的,内存中的数据会在服务器重启后就没有了,也就是不能保证持久化.但是为什么Redis能够脱颖而出呢,很大程度上是 ...

  3. redis的持久化方式RDB和AOF的区别

    1.前言 最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据.由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能, ...

  4. Redis的持久化之RDB方式

    RDB方式 Redis是默认支持的 优势:只有一个文件,时间间隔的数据,可以归档为一个文件,方便压缩转移(就一个文件) 劣势:如果宕机,数据损失比较大,因为它是没一个时间段进行持久化操作的.也就是积攒 ...

  5. 11、Redis的持久化(RDB、AOF)

    写在前面的话:读书破万卷,编码如有神 --------------------------------------------------------------------------------- ...

  6. NoSql数据库Redis系列(3)——Redis数据持久化(RDB)

    大家都知道 Redis 是一个内存数据库,所谓内存数据库,就是将数据库中的内容保存在内存中,这与传统的MySQL,Oracle等关系型数据库直接将内容保存到硬盘中相比,内存数据库的读写效率比传统数据库 ...

  7. 分布式缓存Redis的持久化方式RDB和AOF

    一.前言 Redis支持两种方式的持久化,RDB和AOF.RDB会根据指定的规则“定时”将内存中的数据存储到硬盘上,AOF会在每次执行命令后将命令本身记录下来.两种持久化方式可以单独使用其中一种,但更 ...

  8. 详细分析Redis的持久化操作——RDB与AOF

    一.前言   由于疫情的原因,学校还没有开学,这也就让我有了很多的时间.趁着时间比较多,我终于可以开始学习那些之前一直想学的技术了.最近这几天开始学习Redis,买了本<Redis实战>, ...

  9. redis的持久化(RDB与AOF)

    1.为什么redis要实现持久化? 避免因宕机.断电等场景导致进程退出后数据丢失,如果redis的数据都只存放于内存,那么进程退出后数据就丢失了.持久化机制可以持久化内存数据到硬盘,重启redis后基 ...

  10. Redis的持久化之RDB

    1.什么是Redis的持久化 Redis是一种高级key-value数据库,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,所以Redis的所有数据都 ...

随机推荐

  1. Java Fileupload

    fileupload FileUpload 是 Apache commons下面的一个子项目,用来实现Java环境下面的文件上传功能,与常见的SmartUpload齐名. 组件 1.FileUpLoa ...

  2. TCP协议学习总结(中)

    很多人都说TCP协议是一个十分复杂的协议,在学习当中,我对协议每一个问题都分解学习后,每一个分解我都能体会和理解它的要点,并不难理解.但我把这些拆分的细节合并后,确认感觉这样一个协议相对“臃肿”但又好 ...

  3. Dora.Interception,为.NET Core度身打造的AOP框架 [5]:轻松地实现与其他AOP框架的整合

    这里所谓的与第三方AOP框架的整合不是说改变Dora.Interception现有的编程,而是恰好相反,即在不改变现有编程模式下采用第三方AOP框架或者自行实现的拦截机制.虽然我们默认提供基于IL E ...

  4. 从零开始学深度学习mxnet教程:安装以及基本操作

    一.导言 本教程适合对人工智能有一定的了解的同学,特别是对实际使⽤深度学习感兴趣的⼤学⽣.⼯程师和研究⼈员.但本教程并不要求你有任何深度学习或者机器学习的背景知识,我们将从头开始解释每⼀个概念.虽然深 ...

  5. 【RL-TCPnet网络教程】第13章 RL-TCPnet之TCP服务器

    第13章      RL-TCPnet之TCP服务器 本章节为大家讲解RL-TCPnet的TCP服务器实现,学习本章节前,务必要优先学习第12章TCP传输控制协议基础知识.有了这些基础知识之后,再搞本 ...

  6. 微软跨平台ORM框架之EFCore

    EFCore是微软推出的跨平台ORM框架,想较于EF6.X版本,更加轻量级.EFCore目前已经更新到2.x. 接下来用CodeFirst的方式来使用EFCore. 1.创建控制台程序 2.引入EFC ...

  7. [Swift]LeetCode692. 前K个高频单词 | Top K Frequent Words

    Given a non-empty list of words, return the k most frequent elements. Your answer should be sorted b ...

  8. 初步学习大数据——设置虚拟机固定ip地址

    1.打开本机的网络连接 2.右键以太网,打开属性. 3.右键VMnet8,打开属性.最多不能超过255,最少不能小于0.    0~255之间. 4.找到你要设置固定IP地址的虚拟机 ,选择上方的编辑 ...

  9. 当使用vue的按键修饰符不起效果的时候怎么办?如@keyup.enter = '' ;

    这个问题困扰了我一个多小时,各种测bug !始终测不出来! 直接上代码(错误示范) <el-form-item prop="password"> <el-inpu ...

  10. Ceres配置(vs2013+Win10)

    主要参考文:Ceres Solver 在Windows下安装配置笔记 eigen.gflags.glog.suitesparse按照上面的链接中的指导配置即可. 配置ceres的时候,按照上面的链接内 ...