一文了解:Redis的RDB持久化

Redis是内存数据库,为了保证数据不在故障后丢失,Redis需要将数据持久化到硬盘上。

Redis持久化有两种方式:一种是快照,全量备份。一种是AOF方式,连续增量方式。

RDB

RDB持久化就是把数据生成快照保存到硬盘的过程。每N分钟数据发送了M次写操作之后,从内存dump数据形成rdb文件,压缩后放在备份目录

工作原理

Redis-Server主进程会Fork一个子进程在后台生成RDB文件,主进程可以在不阻塞线程情况下接收其他命令。在主进程Fork过程中会产生阻塞,Fork完成后不在阻塞主进程,持久化工作交给子进程,子进程会生成一个临时的快照文件,完成后会对原有文件进行替换。

保存时间点配置

在redis.conf文件中可以设置每N秒之后M个Key发生了写操作就保存快照。

格式为:save <seconds> <changes>

save 900 1          # 900秒之后至少有1个Key发生写操作
save 300 10 # 300秒之后至少有10个Key发生写操作
save 60 10000 # 60秒之后至少有10000个Key发生写操作

先检查60秒之内是否有1000个写操作,再检查300秒之后是否有10个写操作,最后检查900秒之后是否有1个写操作。

如果想要禁用RDB功能可以注释掉所有的save配置,也可以将save配置改为save ""

文件

RDB文件保存在dir配置的指定目录下,默认为redis-server启动目录,RDB文件文件名为dbfilename配置,默认为dump.rdb文件名,我们可以更改dir和dbfilename配置修改文件保存的路径和文件名。

dir ./

dbfilename dump.rdb

通过config set dir {newDir} 动态修改dir配置

> config set dir /Users/JAVA/Redis/RDB
OK

通过config set dbfilename {newDbfilename} 动态修改RDB文件名称

> config set dbfilename backup.rdb
OK

压缩

RDB文件默认以LZF算法压缩保存,rdbcompression配置默认为yes,当改为no时表示不压缩。

rdbcompression yes

通过config set rdbcompression {yes|no} 动态修改是否压缩

错误处理

当快照过程中发生错误可以通过stop-writes-on-bgsave-error配置禁止Redis再写入数据,默认为yes开启。

stop-writes-on-bgsave-error yes

通过config set stop-writes-on-bgsave-error {yes|no} 动态修改是否开启RDB文件快照过程出错时禁止写入数据到Redis

检验

在版本5中,为了保证RDB文件的完整性会在文件末尾加入一个CRC64的校验码。通过rdbchecksum配置是否开启,如果配置为no则使用0代替CRC64校验码,加载RDB文件时会跳过校验。

rdbchecksum yes

通过config set rdbchecksum {yes|no} 动态修改是否添加校验码

手动触发命令

save命令

save命令会使用阻塞主进程的方式生成RDB文件,这意味着生成RDB文件过程中其他命令将阻塞等待RDB文件生成完成。所以不建议在生产环境使用。

> save
OK

bgsave和lastsave命令

bgsave命令会使用和自动触发生成RDB文件一样,在后台fork()一个子进程生成RDB文件。可以通过lastsave命令查看是否成功。

> bgsave
Background saving started
> lastsave
(integer) 1565190498

优缺点

优点
  1. 保存了某个时间点的快照数据,适合做灾备
  2. RDB的启动速度比AOF快

缺点

  1. 没办法做到实时持久化,在保存时间点未到达时故障,容易丢掉最新数据
  2. fork操作会在创建子进程期间阻塞主进程

结语

本人深知水平有限,欢迎指正本文错误之处。


欢迎关注我的微信公众号:bate喵

一文了解:Redis的RDB持久化的更多相关文章

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

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

  2. 看完这篇还不懂Redis的RDB持久化,你们来打我!

    一.为什么需要持久化 redis里有10gb数据,突然停电或者意外宕机了,再启动的时候10gb都没了?!所以需要持久化,宕机后再通过持久化文件将数据恢复. 二.优缺点 1.rdb文件 rdb文件都是二 ...

  3. Redis使用RDB持久化和AOF持久化的区别 - 小白之所见

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

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

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

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

  6. mysql主从复制、redis基础、持久化和主从复制

    一.mysql(mariadb)基础 1.基础命令(centos7操作系统下) 1.启动mysql systemctl start mariadb 2.linux客户端连接自己 mysql -uroo ...

  7. 第10章 RDB持久化

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

  8. Redis基础与持久化

    Redis介绍 软件说明 Redis是一款开源的,ANSI C语言编写的,高级键值(key-value)缓存和支持永久存储NoSQL数据库产品. Redis采用内存(In-Memory)数据集(Dat ...

  9. [翻译自官方]什么是RDB和AOF? 一文了解Redis持久化!

    ​概述 本文提供Redis持久化技术说明,  建议所有Redis用户阅读. 如果您想更深入了解Redis持久性原理机制和底层持久性保证, 请参考文章 揭秘Redis持久化: http://antire ...

随机推荐

  1. kali Linux渗透测试技术详解

    kali Linux渗透测试技术详解 下载:https://pan.baidu.com/s/1g7dTFfzFRtPDmMiEsrZDkQ 提取码:p23d <Kali Linux渗透测试技术详 ...

  2. Jenkins+svn+ftp自动化发布asp.net项目

    今天将自己所掌握的(Jenkins+svn+ftp自动化发布asp.net项目)知识分享给大家,希望能帮组到大家: (1)先下载Jenkins并安装: (2)安装.Net所需要的插件: (3)配置插件 ...

  3. 借助URLOS快速安装WordPress

    ### 简介 WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统.WordPress具有插件架构和模板系统.截至2018年4月,排名前1000万的网站超过30.6%使 ...

  4. HDU 2121:Ice_cream’s world II(不定根的最小树形图)

    题目链接 题意 求有向图的最小生成树,且根不定. 思路 最小树形图即求有向图的最小生成树,用的是朱刘算法. 这里不定根,那么可以建立一个虚根,让虚根和所有点相连,权值为一个很大的数(这里直接设为所有边 ...

  5. 我在工作中遇到的redis集群使用

    写次随笔,给自己工作学习中记录一个笔记 废话不多说,直接上代码: 功能:将相关信息存到redis中,并设置过期时间,如果redis中有,从redis获取,如果没有,从mysql中获取.redis配置了 ...

  6. myecliese加大内存

    加大内存代码 : -Xms512m -Xmx1024m -XX:PermSize=256M -XX:MaxPermSize=1024m

  7. C#中的委托和事件(下篇)

    上次以鸿门宴的例子写了一篇博文,旨在帮助C#初学者迈过委托和事件这道坎,能够用最快的速度掌握如何使用它们.如果觉得意犹未尽,或者仍然不知如何在实际应用中使用它们,那么,这篇窗体篇,将在Winform场 ...

  8. 寻觅Azure上的Athena和BigQuery (二):神奇的PolyBase

    前情回顾 在“数据湖”概念与理论逐渐深入人心的今天,面向云存储的交互式查询这个需求场景显得愈发重要.这是因为原生的云存储(主要指S3这样的对象存储)既能够容纳大容量的明细数据,又能在性能和成本间取得一 ...

  9. C语言学习书籍推荐《数据结构与算法分析:C语言描述(原书第2版)》下载

    维斯 (作者), 冯舜玺 (译者) <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行 ...

  10. 自定义HashSet判重标准

    HashSet在执行add时会首先根据目标类的hashcode判断是否有与其hashcode相同的对象,若有则使用equals该对象判断是否与其相同. HashSet保证了元素的唯一性, 我们可以通过 ...