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 文件。


总结

  1. RDB 是 redis 内存到硬盘的快照,用于持久化。
  2. save 通常会阻塞 redis。
  3. bgsave 不会阻塞 redis,但是会 fork 新进程。
  4. save 自动配置满足任一就会被执行。
  5. 有些触发机制不容忽视。

转载于:https://www.cnblogs.com/weixuqin/p/10966763.html

redis 学习(17) -- RDB相关推荐

  1. Redis学习笔记(八):RDB持久化

    目录 简介 RDB持久化 1. RDB文件如何创建 1.1 save, bgsave命令 1.2 定期触发 1.2.1 保存条件怎么设置 1.2.2 实现细节 2. RDB文件如何加载 3. RDB文 ...

  2. Redis初学17:集群

    集群 简介 Redis 集群实现了对Redis的水平扩容,即启动 N 个 redis 节点,将整个数据库分布存储在这 N 个节点中,每个节点存储总数据的 1/N . Redis 集群通过分区(part ...

  3. redis学习笔记-持久化

    redis学习笔记-持久化 前言 redis持久化有两种方式:RDB和AOF.分别对应着全量复制和增量复制.深刻理解各自的实现方式及适用场景对redis的使用和运维十分重要.下面就分别介绍. RDB持 ...

  4. Redis——学习之路三(初识redis config配置)

    我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息. 我们就 ...

  5. 狂胜——Redis学习笔记

    [狂神说Java]Redis最新超详细版教程通俗易懂_哔哩哔哩_bilibili 总体大纲outline nosql讲解,非关系型数据库 阿里巴巴架构演进 nosql数据模型 Nosql四大分类 CA ...

  6. Redis学习、缓存、持久化、哨兵模式

    个人博客欢迎访问 总结不易,如果对你有帮助,请点赞关注支持一下 微信搜索程序dunk,关注公众号,获取博客源码 我写代码是为了更好的表达自我,这是艺术创作,而不单单是为了把事情搞定. -Antirez ...

  7. Redis学习笔记(B站狂神说)(自己总结方便复习)

    Redis学习笔记B站狂神说 redis: 非关系型数据库 一.NoSQL概述 1.为什么要用Nosql 1.单机Mysql的年代 思考一下,这种情况下:整个网站的瓶颈是什么? 1.数据量如果太大,一 ...

  8. 菜鸟的redis学习总结

    菜鸟的redis学习总结 说明 一.Nosql和Mysql 二.Nosql常见类型及比较 三.简介 四.入门系列 (1)性能测试 (2)String类型 (3)List类型 (4)Set集合 (5)H ...

  9. Redis学习 - NoSQL简介、redis安装、redis基础知识、数据类型、持久化、订阅发布、主从复制、哨兵模式、缓存击穿和雪崩

    学习视频地址:https://www.bilibili.com/video/BV1S54y1R7SB 完结撒花,感谢狂神 文章目录 1. NoSQL 1.1 单机Mysql的演进 1.2 当今企业架构 ...

最新文章

  1. 初识ES-es与mysql的概念对比
  2. 查找任意数目参数的最大值
  3. 一文讲清,MySQL中的二级索引
  4. Spring Boot(19)---开发Web应用之Thymeleaf篇
  5. mysql的repeat_mysql函数中使用repeat循环的例子
  6. 【实践】万字干货:如何优雅地记录操作日志?(附代码)
  7. 判断一个变量是否是Array类型
  8. 在新版linux上编译老版本的kernel出现kernel/timeconst.h] Error 255
  9. 苹果手机关闭自动更新_苹果手机会quot;偷钱quot;的2个功能,越早关闭越好,不然经常无故被扣钱...
  10. WPS设置标题行固定
  11. TOEFL 9个托福独立写作模板总结
  12. movs 数据传送指令_数据传送指令之:MOV指令
  13. 用了40年,我们在元宇宙中打开了通往未来世界一道门
  14. 预装Vista的HP华硕笔记本如何安装WinXP
  15. [项目管理] 技术经验分享的重要性
  16. 机器人笔记psv中文_《机器人笔记》白金攻略 机器人笔记奖杯攻略
  17. 网易之小易最近在数学课上学习到了集合的概念,集合有三个特征:1.确定性 2.互异性 3.无序性.需要根据给定的w,x,y,z,求出集合中一共有多少个元素。
  18. 投影仪显示无法连接服务器失败怎么办,电脑和投影仪连不上怎么办
  19. 从零开始搭建博客Hexo-Node-Git搭建博客
  20. MATLAB操作学习---起式

热门文章

  1. 信标网络和非信标网络
  2. 有什么计算机可以拆分数字,汇总:WPS表技能-在单元格中拆分文本和数字
  3. android开发ImageButton图片透明化的坑
  4. ORA-00257: 归档程序错误
  5. Intellij IDEA 安装配置(超详细)
  6. unity本地存储/客户端存储方式
  7. 【SQL Server】将字符串转换为 smalldatetime 数据类型时失败
  8. Brew安装mysql时,最后ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents这句什么意思
  9. 第二季度有望实行取消手机用户话费的有效期
  10. python初中文化好学吗_工作三年却被实习生抢了饭碗,学会Python到底有多吃香?...