rdb 快照持久化

发布于 2021-08-05 12:54:28 字数 1647 浏览 1557 评论 0

一、持久化的方式

什么是持久化:redis 所有数据保存在内存中,对数据的更新将异步保存到磁盘上。

持久化:即把数据存储于断电后不会丢失的设备中,通常是硬盘。

常见的持久化方式:

  • 主从:通过从服务器保存和持久化,如 mongoDB 的 replication sets 配置
  • 日志:操作生成相关日志,并通过日志来恢复数据

couchDB 对于数据内容的修改,只追加,则文件本身就是日志,不会丢失数据。

二、redis 之 rdb 快照持久化

1、手动 save 同步

手动向redis客户端发送save命令。redis会同步dump rdb文件,此过程会阻塞其他命令。
>redis save
ok

缺点:由于是同步的命令,所以当数据量比较大的时候会造成阻塞。
文件策略:如果存在老的rdb文件,新的替换老的。
复杂度:o(n)

2、手动 bgsave 异步

手动向redis客户端发送bgsave命令。redis会异步dump rdb文件,此过程不会阻塞其他命令。
>redis bgsave
Backgroud saving started

redis主进程会fork()一个子进程用来执行dump操作,主进程依然可以处理其他客户端的请求。
当rdb文件生成成功之后,子进程会告诉主进程。

缺点:fork会消耗额外的内存。
文件策略:如果存在老的rdb文件,新的替换老的。
复杂度:o(n)

3、rdb 自动的工作原理

(1)每隔N分钟或N次写入之后
(2)从内存dump数据形成rdb文件
(3)压缩
(4)放在备份目录
注:N分钟或N次/压缩/目录 部分可以通过参数来配置

三、rdb 快照相关参数

配置 seconds changes

save 900 1 #刷新快照到硬盘中,必须满足两者要求才会触发,即900秒之后至少一个关键字发生变化
save 300 10 #必须是300秒之后至少10个关键字发生变化
save 60 10000 #必须是60秒之后至少有10000个关键字发生变化
stop-writes-on-bgsave-error yes #后台存储错误,客户端停止写
rdbcompression yes #使用LZF压缩rdb文件
rdbchecksum yes #存储和加载rdb文件时校验
dbfilename dump.rdb #设置rdb文件名(dump-${port}.rdb)
dir ./ #设置工作目录,rdb文件会写入该目录(bigdiskpath)

四、测试 redis 性能

在 redis 的 bin 目录下面有一个 redis-benchmark 命令,专门用来测试 redis 的性能

五、rdb 的优势

dump 的内存的快照,恢复速度特别快

六、rdb的缺陷

在两个保存点之间,断电将会丢失 1-N 分钟的数据,处于对持久化的更精细要求,redis 增添了 aof 方式 append only file

七、容易忽略生成rdb文件的几个命令

在我们没有执行 save、bgsave 也没有配置自动 dump 的策略,那么为什么依然会生成 rdb 文件呢? 这时候可以考虑一下几点:

1、全量复制(比如在主从模式下的复制)
2、debug reload
3、shutdown

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

已经忘了多久

文章 0 评论 0

15867725375

文章 0 评论 0

LonelySnow

文章 0 评论 0

走过海棠暮

文章 0 评论 0

轻许诺言

文章 0 评论 0

信馬由缰

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文