十念 发表于 2024-6-15 01:19:56

【Redis7】Redis长期化机制之RDB

1.RDB简介

Redis长期化机制中的RDB(Redis Database)是一种将Redis在某个时间点的数据以快照情势保存到磁盘上的方法。
原理:RDB通过创建一个包含Redis数据库所有键值对的快照文件(通常以.rdb作为文件后缀)来实现长期化。这个过程将内存中的数据以二进制格式转储到磁盘上,形成一个紧凑的文件,便于备份和迁移。
三种触发方式:配置触发,手动触发和后台触发


[*]手动触发:通过实行SAVE下令可以立刻实行一次快照生成,但必要留意,该下令会阻塞Redis服务器,直到RDB文件创建完毕,因此在生产环境中不推荐直接使用。
[*]后台触发:使用BGSAVE下令可以在后台异步实行快照生成,不会阻塞服务器处置处罚客户端请求。
[*]配置触发:Redis服务器可以根据配置文件中的计谋自动实行快照,如设置save指令来定义在一定时间内发生指定数量的写操作后自动实行BGSAVE。
2.RDB配置触发设置

   配置触发:Redis服务器可以根据配置文件中的计谋自动实行快照,如设置save指令来定义在一定时间内发生指定数量的写操作后自动实行BGSAVE。
RDB的配置通常在Redis的配置文件redis.conf中进行,包括RDB文件的保存路径、自动保存的规则等。
Redis6.2之前,RDB的配置如下:
https://img-blog.csdnimg.cn/img_convert/28b653478501f1511308e577cfcecec7.png
在 Redis.conf 配置文件中的 SNAPSHOTTING 下配置 save 参数,来触发 Redis 的 RDB 长期化条件,好比“save m n”:表现 m 秒内数据集存在 n次修改时,自动触发 bgsave


[*]save 900 1:每隔 900s(15min),如果有凌驾 1 个 key 发生了变化,就写一份新的 RDB 文件
[*]save 300 10:每隔 300s(5min),如果有凌驾 10 个 key 发生了变化,就写一份新的 RDB 文件
[*]save 60 10000:每隔 60s(1min),如果有凌驾 10000 个 key 发生了变化,就写一份新的 RDB 文件
以下是Redis7中对RDB的配置内容:
https://img-blog.csdnimg.cn/img_convert/f49e038cd1037242843c7d7eff33a576.png


[*]save 3600 1:每隔 3600s(60min),如果有凌驾 1 个 key 发生了变化,就写一份新的 RDB 文件
[*]save 300 100:每隔 300s(5min),如果有凌驾 100 个 key 发生了变化,就写一份新的 RDB 文件
[*]save 60 10000:每隔 60s(1min),如果有凌驾 10000 个 key 发生了变化,就写一份新的 RDB 文件
接下来通过修改配置文件,才修改自动保存规则,步调如下:
1.修改自动保存规则,10秒内2个key发生变化
https://img-blog.csdnimg.cn/direct/22470767b5c247cd90efab8dbca433a1.png
2.创建rdb文件存放的文件夹
https://img-blog.csdnimg.cn/direct/68d59d3e20064cbdbd4041939074274b.png
3.修改redis配置文件, 505行左右
https://img-blog.csdnimg.cn/direct/4797815c5443471dba8292f26a1cd5eb.png
4.修改rdb文件的名字,默认是dump.rdb
https://img-blog.csdnimg.cn/direct/ef218f75801149e48d7a7e25be81e593.png
我这里修改成了dump+端标语的情势,也可以不修改
https://img-blog.csdnimg.cn/direct/6377fd7c19894902a03d7344c4e9e7d3.png
改完配置文件要重启redis服务
5.连接redis,进行测试
使用下令config get dir,测试配置是否见效
127.0.0.1:6379> config get dir
1) "dir"
2) "/redis-config/rdbfiles"
127.0.0.1:6379>
这里会显示修改rdb文件存放的文件夹,我这里是没题目的
只必要在redis中让key10秒内修改两次即可,修改完成之后查看文件夹,可以看到多了一个.rdb文件
https://img-blog.csdnimg.cn/direct/553665b98fec48f587bb91350bfa8f32.png
示例:
修改原来生成的.rdb文件名称
https://img-blog.csdnimg.cn/direct/c3ff71d9f598463c8b3b7c77cf135498.png
清空所有的key
https://img-blog.csdnimg.cn/direct/8b5b3996c6794458bcaa0d2be682c5b8.png
可以看到又生成了一个.rdb文件
https://img-blog.csdnimg.cn/direct/bd343d29a36e480798369a5fcc1e615e.png


[*]flushdb这种下令也会生成.rdb文件,但是这个文件毫无意义
使用原来的.rdb文件,观察是否能规复数据
首先先将原来的.rdb文件删除.然后重启假造机,重启假造机之后,会再生成一个.rdb文件 在将这个.rdb文件删除,将原来有数据的.rdb文件名改归去
https://img-blog.csdnimg.cn/direct/e94731f9d2234d0ea14cf1e4ef9881ee.png
重连redis服务,可以看到数据规复了
https://img-blog.csdnimg.cn/direct/17e2ecc2479641abb4ecc7eee0f48c69.png
3.RDB的优缺点



[*]优点:RDB文件紧凑,规复速度比AOF快;适当做灾难规复;对数据完整性要求不高的场景下非常有用。
[*]缺点:

[*]数据规复点取决于最后一次快照,如果服务器故障发生在两次快照之间(也就是一次快照之后,又修改了数据,但是还没触发快照),这段时间的数据会丢失;频繁实行快照可能会影响性能。
[*]内存数据的全量同步,如果数据量太大会导致I/0严重影响服务器性能
[*]RDB依靠于主历程的fork,在更大的数据会合,这可能会导致服务请求的瞬间耽误fork的时间内存中的数据被克隆了一份,大抵2倍的膨胀性,必要考虑

4.怎样查抄修复RDB文件

RDB在备份的时间,是有可能出现文件破坏的.比方:RDB在进行文件写入的时间,写了一半,服务器突然宕机了,那么这条数据就有题目,从而到底整个文件都读不出来.
那么怎样查抄修复RDB文件呢?
1.其实在/usr/local/bin/目次下有一个redis-check-rdb
https://img-blog.csdnimg.cn/direct/fc4a1c6aaf1948e185700811a1c4fcd1.png
2.因此在任何地方使用redis-check-rdb 下令即可完成查抄修复
https://img-blog.csdnimg.cn/direct/448dc73c0dab404687c3c232b7ae62ad.png
5.怎样禁用RDB

方法有两种:

[*]动态所有停止RDB保存规则的方法:redis-cli config set save ""
[*]修改配置文件,禁用快照
https://img-blog.csdnimg.cn/direct/b78268c5e41e4ed5be460c421430e335.png
6.RDB参数优化

1.stop-writes-on-bgsave-error:控制当Redis在实行后台保存(background save,简称bgsave)操作生成RDB快照文件时的行为。
默认yes.意思是那么当Redis在创建RDB快照过程中碰到错误(比方磁盘空间不敷、权限题目等),Redis将停止担当任何可能修改数据集的下令,以防止数据不一致的环境发生。
如果配置成no,表现你不在乎数据不一致或者有其他的本事发现和控制这种不一致,那么在快照写入失败时也能确保redis继续担当新的写请求
https://img-blog.csdnimg.cn/direct/f7b2f16e06ac45df934875fe9197201a.png
2.rdbcompression:用于控制Redis在生成RDB(Redis Database)快照文件时是否对数据进行压缩。
默认是yes,意思是Redis会在保存数据到RDB文件之前对其进行压缩。这样做的主要目的是减少RDB文件的体积,从而节省存储空间并可能加快备份和规复过程中的传输速度。
压缩过程通常使用LZF算法,这是一种相对快速且高效的压缩算法,可以或许在压缩数据巨细与CPU斲丧之间取得一个平衡。尽管压缩会增长一定的CPU使用率,但对于大多数场景来说,这一开销相对于节省的存储空间和提高的I/O服从来说是可担当的。
https://img-blog.csdnimg.cn/direct/695743c25ab243f5b03a7d6251774f90.png
3.rdbchecksum:用于控制Redis在载入RDB(Redis Database)快照文件时是否进行数据校验。
默认是yes,意思是Redis在从RDB文件规复数据到内存之前,会计算快照文件内的数据校验和(checksum),然后与RDB文件末了存储的校验和进行对比,以确保数据的完整性。
https://img-blog.csdnimg.cn/direct/8b539c435e9a474ba6c02c1134dc9e22.png
4.rdb-del-sync-files:控制着在主从复制(replication)场景下,从节点(slave)对于用于同步的RDB文件的处置处罚方式。
默认是no,意思是即使从节点没有开启任何长期化(既没有启用RDB长期化也没有启用AOF长期化),在主从全量同步过程中使用的RDB文件也不会被自动删除。
https://img-blog.csdnimg.cn/direct/cf1f7113817b487ab7efbd12d9cf9229.png
7.总结


[*] RDB是一种将Redis在某个时间点的数据以快照情势保存到磁盘上的方法,主要是依靠rdb文件。
[*] 触发RDB环境: 到达配置的频率和时间,save, bgsave, shutdown , flushall/flushdb

[*]save不发起使用
[*]flushall/flushdb:产生的rdb文件没有意义

[*] 使用redis-check-rdb 下令即可完成查抄修复rdb文件
[*] 禁用RDB:

[*]使用下令redis-cli config set save ""
[*]修改配置文件


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【Redis7】Redis长期化机制之RDB