前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >redis 学习(17) -- RDB

redis 学习(17) -- RDB

作者头像
希希里之海
发布2019-06-05 16:42:24
4390
发布2019-06-05 16:42:24
举报
文章被收录于专栏:weixuqin 的专栏weixuqin 的专栏

redis -- RDB

什么是 RDB

经过RDB之后,redis会将内存中的数据创建一份快照到硬盘中,称为RDB文件(二进制)

当redis重新启动时,会加载硬盘中的RDB文件,加载到内存中完成数据恢复。

RDB 的触发方式 - 主要三种方式

  • save(同步)
  • bgsave(异步)
  • 自动
1. save(同步)

执行流程如下:

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

执行流程如下:

  • 调用 bgsave 后,会调用 linux 的 fork() 函数,创建一个子进程
  • 如果存在老的 RDB 文件,会先创建一个临时文件,然后对老文件进行替换
  • 时间复杂度,O(n)
  • 子进程名称:redis-rdb-bgsave
代码语言:javascript
复制
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/ 目录下,修改内容如下,其他配置保持默认不变。

代码语言:javascript
复制
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 服务:

代码语言:javascript
复制
redis-server /opt/soft/redis/config/redis-6379.conf

启动客户端:

代码语言:javascript
复制
redis-cli

执行:

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

现在我们演示一下自动生成 RDB 文件操作,修改 redis-6379.conf 文件,配置自动 RDB 操作:

代码语言:javascript
复制
save 60 5

然后重启 redis 服务,启动 redis 客户端,执行:

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


总结

  1. RDB 是 redis 内存到硬盘的快照,用于持久化。
  2. save 通常会阻塞 redis。
  3. bgsave 不会阻塞 redis,但是会 fork 新进程。
  4. save 自动配置满足任一就会被执行。
  5. 有些触发机制不容忽视。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-06-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • redis -- RDB
  • 什么是 RDB
  • RDB 的触发方式 - 主要三种方式
    • 1. save(同步)
      • 2. bgsave(异步)
        • 3. 通过配置自动进行 RDB 操作
        • RDB 相关配置
        • RDB 最佳配置
        • 不容忽视的触发机制
        • 演示
        • 总结
        相关产品与服务
        云数据库 Redis
        腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档