redis 学习(17) -- RDB
redis -- RDB
什么是 RDB
经过RDB之后,redis会将内存中的数据创建一份快照到硬盘中,称为RDB文件(二进制)
当redis重新启动时,会加载硬盘中的RDB文件,加载到内存中完成数据恢复。

RDB 的触发方式 - 主要三种方式
- save(同步)
- bgsave(异步)
- 自动
1. save(同步)
执行流程如下:

- 在 save 的同时,其他命令会阻塞等待
- 如果存在老的 RDB 文件,会先创建一个临时文件,然后对老文件进行替换
- 时间复杂度,O(n)
redis> save
OK
2. bgsave(异步)
执行流程如下:

- 调用 bgsave 后,会调用 linux 的 fork() 函数,创建一个子进程
- 如果存在老的 RDB 文件,会先创建一个临时文件,然后对老文件进行替换
- 时间复杂度,O(n)
- 子进程名称:redis-rdb-bgsave
redis> bgsave
BAckground saving started
3. 通过配置自动进行 RDB 操作
- 内部相当于bgsave
- Redis默认的save配置
| 配置 | second | changes |
|---|---|---|
| save | 900 | 1 |
| save | 300 | 10 |
| save | 60 | 10000 |
满足以上任一条件,将创建(bgsave)RDB 文件(二进制)。
比如 60秒内,10000 条数据发生改变,将自动生成 RDB 文件。
缺点
不好控制 RDB 文件的生成,假如写入量很大的话 RDB 生成太过频繁,频繁写入硬盘,对硬盘负担很大。
RDB 相关配置
| 配置项 | 默认值 | 含义 |
|---|---|---|
| dbfilename | dump.rdb | RDB快照文件名 |
| dir | ./ | RDB快照文件生成所在目录 |
| stop-writes-on-bgsave-error | yes | bgsave时发生错误是否停止写入 |
| rdbcompression | yes | RDB文件是否采用压缩 |
| rdbchecksum | yes | 是否对RDB进行校验 |
RDB 最佳配置
- 不配置自动RDB操作
- dbfilename dump-${port}.rdb
- dir /redisDataPath
- stop-writes-on-bgsave-error yes
- rdbcompression yes
- rdbchecksum yes
不容忽视的触发机制
- 主从复制时机的全量复制,master 节点会执行 bgsave
- debug reload
- shutdown
- flushDB 、 flushAll
演示
这里重新写一个 redis-server 的启动配置文件,命名为 redis-6379.conf,放到 /opt/soft/redis/config/ 目录下,修改内容如下,其他配置保持默认不变。
daemonize yes
pidfile /var/run/redis-6379.pid
port 6379
logfile "6379.log"
# save 900 1
# save 300 10
# save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump-6379.rdb
dir /opt/soft/redis/data
启动 redis 服务:
redis-server /opt/soft/redis/config/redis-6379.conf
启动客户端:
redis-cli
执行:

可以看到,在 /opt/soft/redis/data/ 目录下,生成了 RDB文件。

现在我们演示一下自动生成 RDB 文件操作,修改 redis-6379.conf 文件,配置自动 RDB 操作:
save 60 5
然后重启 redis 服务,启动 redis 客户端,执行:

打印日志尾部信息,可以看到在 60 s 内发生了 5 次改变,所以生成了 RDB 文件。

总结
- RDB 是 redis 内存到硬盘的快照,用于持久化。
- save 通常会阻塞 redis。
- bgsave 不会阻塞 redis,但是会 fork 新进程。
- save 自动配置满足任一就会被执行。
- 有些触发机制不容忽视。
redis 学习(17) -- RDB的更多相关文章
- redis学习笔记——RDB、AOF和复制时对过期键的处理
AOF.RDB和复制功能对过期键的处理 生成RDB文件 在执行SAVE命令或者BGSAVE命令创建一个新的RDB文件时,程序会对数据库中的键进行检查,已过期的键不会被保存到新创建的RDB文件中.举个例 ...
- redis学习笔记——RDB和AOF持久化二
上一篇对RDB的源码分析是比较多的,但是AOF持久化执行进行了一些理论上的分析和概念的说明.本来想自己偷一些懒,将上篇文章中最后所给链接的AOF实现代码随便过一过算了,后来也就是在过的过程中发现自己这 ...
- redis学习笔记——RDB和AOF持久化一
为防止数据丢失,需要将 Redis 中的数据从内存中 dump 到磁盘,这就是持久化.Redis 提供两种持久化方式:RDB 和 AOF.Redis 允许两者结合,也允许两者同时关闭. RDB 可以定 ...
- Redis学习笔记(八) RDB持久化
Redis是内存数据库,它将自己的数据库状态存储在内存里面,所以如果不想办法将存储在内存中的数据库状态保存到磁盘,那么服务器 进程一旦退出,服务器中的数据库状态也会消失不见. 为了解决这个问题,Red ...
- Redis学习笔记六:持久化实验(AOF,RDB)
作者:Grey 原文地址:Redis学习笔记六:持久化实验(AOF,RDB) Redis几种持久化方案介绍和对比 AOF方式:https://blog.csdn.net/ctwctw/article/ ...
- 峰Redis学习(7)Redis 持久化RDB方式
第一节:Redis 持久化介绍 redis所有的数据都存在内存中,所以速度非常快,但是一旦断电等情况,数据就没了.从内存当中同步到硬盘上,这个过程叫做持久化过程. 持久化操作,两种方式:rdb方式.a ...
- 【Redis】Redis学习(七) Redis 持久化之RDB和AOF
Redis 持久化提供了多种不同级别的持久化方式:一种是RDB,另一种是AOF. RDB 持久化可以在指定的时间间隔内生成数据集的时间点快照(point-in-time snapshot). AOF ...
- redis 学习笔记(6)-cluster集群搭建
上次写redis的学习笔记还是2014年,一转眼已经快2年过去了,在段时间里,redis最大的变化之一就是cluster功能的正式发布,以前要搞redis集群,得借助一致性hash来自己搞shardi ...
- Redis——学习之路三(初识redis config配置)
我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息. ...
随机推荐
- Python控制台输出时刷新当前行内容而不是输出新行
需求目标 执行Python程序的时候在控制台输出内容的时候固定一刷新内容,如下: Downloading File FooFile.txt [%] 而不是 Downloading File FooFi ...
- 预处理、const、static与sizeof-sizeof与strlen有哪些区别
1:它们的区别如下: (1)sizeof是操作符,strlen是函数. (2)sizeof操作符的结果类型是size_t,它在头文件中typedef为unsignedint类型,该类型保证能容纳实现所 ...
- Linux kernel device mapper
Device Mapper 是 Linux2.6 内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构,如图 1. 图1 Device Mappe ...
- sql 同一张表查询不同数据合并之后关联查询
SELECT t.articleId articleId, comments.`comments` parentComment, t.commentId commentsId, comments.`i ...
- VS2015编译cef3-2357
1.会遇到把警告当错误的情况 按照如下设置即可 2. 错误 C2334 “:”的前面有意外标记:跳过明显的函数体 (编译源文件 E:\cef_binary_3.2357.1271.g8e0674e_w ...
- 检查并解决CentOS 7 安装Tomcat是否成功
参考网址 https://blog.csdn.net/Blue_Sky_rain/article/details/91348791
- 用hugo搭建个人博客
这几天研究了用hugo搭建个人博客. 简单的整理了一下. 1.安装hugo(windows 请查看官网介绍 https://gohugo.io/getting-started/installing/) ...
- springBoot2.X---过滤器,监听器,拦截器
过滤器,监听器,拦截器 一.画图理解 过滤器(filter),监听器(listener),拦截器(Interceptor). 通过两幅图我们可以理解拦截器和过滤器的特点 1.过滤器 过滤器是在请求进入 ...
- mysql数据库指定ip远程访问
1.登录 mysql -u root -p 之后输入密码进行登陆 2.权限设置及说明 2.1添加远程ip访问权限 GRANT ALL PRIVILEGES ON *.* TO 'root'@'192. ...
- rpm -qa|grep jdk
转:http://blog.csdn.net/u012110719/article/details/42002221 RPM是RedHat Package Manager(RedHat软件包管理工具) ...