真枪实弹,Redis 的 RDB 配置和数据恢复

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 Redis 版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 真枪实弹,Redis 的 RDB 配置和数据恢复

真枪实弹,Redis 的 RDB 配置和数据恢复

RDB 配置解释

在 redis.conf 文件中,默认有 RDB 持久化配置:

save 900 1
save 300 10
save 60 10000

解释:

  • 这些配置称为检查点。
  • 每隔 900s,如果有至少 1 个 key发生了变更,就生成一个新的 dump.rdb 文件,这个 dump.rdb 文件就是 redis 内存中完整的数据快照,也叫做 snapshotting。
  • 同上,每隔 300s,检查是否有 10 个key 发生了变更,或者每隔 60s,检查是否有 10000个 key 发生了变更,如果有,则生成 dump.rdb 文件。
  • 可以配置多项检查点。
  • 可以移除所有检查点,只需要这样配置即可:save "",或者移除所有配置项。

RDB 持久化的工作流程

(1)Redis 根据配置尝试生成 rdb 快照文件。

(2)Redis fork 一个子进程。

(3)子进程尝试将数据 dump 到一个临时的 RDB 快照文件中。

(4)完成快照后,就把临时文件替换掉之前生成的 RDB 文件。

RDB 实验

实验(1)测试 Redis 被 shutdown 时,Redis 是否会丢失数据。

首先重启 Redis,让检查点的时间窗口重置。

redis-cli shutdown
cd /etc/init.d
./redis_6379 start
ps -ef | grep redis

然后往 Redis 中插入几条数据:

redis-cli
set key1 abc
set key2 222
get key1
get key2

目前只设置了 2 个 key,且还没有到 900 s,所以不会触发自动生成 RDB 快照。

这个时候我们可以猜测下重启 redis 后,刚刚插入的两个 key 是否被持久化到 dump 文件中了。

我们来测试下:

重启 Redis,获取 key1 和 key2:

redis-cli shutdown
cd /etc/init.d
./redis_6379 start
ps -ef | grep redis
redis-cli
get key1
get key2

会看到 Redis 重启后还是存在 key1 和 key2,并不会丢失。

另外还可以找下 dump.rdb 文件,更新时间更新为 shutdown 的时间。

结论:shutdown 时,Redis 不会丢失丢失,会将内存中的数据立即生成一份完整 RDB 快照。

实验(2)用 kill -9 直接干掉 Redis,模拟 Redis 故障,验证数据是否会丢失。

首先插入几条新数据

redis-cli
set key3 333
set key4 444
get key3
get key4

mark

然后获取 Redis 的进程 id

ps -ef | grep redis

Redis PID=1485,然后用 kill -9 干掉 Redis 进程:

kill -9 1485

然后重启 Redis

cd /var/run
rm -rf redis_6379.pid
cd /etc/init.d
./redis_6379 start

然后获取 key3 和 key4,发现没有这两个 key。

get key3
get key4

我们也可以查看下 dump.rdb 文件的更新时间是否有改变:

如果我们想要保证减少 Redis 故障导致的数据丢失,可以通过设置一个频率更高的检查点,每 5s 检查一次,如果有至少一条数据更新,则进行 RDB 快照。如下所示的配置:

save 5 1

但是如果故障正好发生在快照之前,那么变更的数据就没有生成到 RDB 文件中了。

而且生成的 RDB 的频率过高,而且变更的数据量很大的话,生成 RDB 的文件也会很大,操作 IO 的时间也会变长,长时间占用磁盘 IO 会造成性能问题。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6天前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
25天前
|
NoSQL Redis 容器
【Azure Cache for Redis】Redis的导出页面无法配置Storage SAS时通过az cli来完成
【Azure Cache for Redis】Redis的导出页面无法配置Storage SAS时通过az cli来完成
|
26天前
|
缓存 NoSQL 测试技术
【Azure Redis 缓存】Azure Redis 功能性讨论三: 调优参数配置
【Azure Redis 缓存】Azure Redis 功能性讨论三: 调优参数配置
|
28天前
|
存储 缓存 NoSQL
【Azure Redis 缓存 Azure Cache For Redis】如何设置让Azure Redis中的RDB文件暂留更久(如7天)
【Azure Redis 缓存 Azure Cache For Redis】如何设置让Azure Redis中的RDB文件暂留更久(如7天)
|
25天前
|
NoSQL Redis
【Azure Redis】Redis导入备份文件(RDB)失败的原因
【Azure Redis】Redis导入备份文件(RDB)失败的原因
|
26天前
|
缓存 NoSQL Redis
【Azure Redis 缓存】Azure Cache for Redis 服务的导出RDB文件无法在自建的Redis服务中导入
【Azure Redis 缓存】Azure Cache for Redis 服务的导出RDB文件无法在自建的Redis服务中导入
|
26天前
|
存储 缓存 NoSQL
【Azure Redis 缓存】由Azure Redis是否可以自定义密码而引申出Azure PaaS的Redis服务是否可以和自建的Redis进行主从配置呢?
【Azure Redis 缓存】由Azure Redis是否可以自定义密码而引申出Azure PaaS的Redis服务是否可以和自建的Redis进行主从配置呢?
|
26天前
|
缓存 NoSQL 网络协议
【Azure Redis 缓存】如何使得Azure Redis可以仅从内网访问? Config 及 Timeout参数配置
【Azure Redis 缓存】如何使得Azure Redis可以仅从内网访问? Config 及 Timeout参数配置
|
2月前
|
NoSQL Redis 数据安全/隐私保护
Redis主从配置
Redis主从配置
47 5
|
2月前
|
NoSQL Redis
Redis 主从复制架构配置及原理
Redis 主从复制架构配置及原理
45 5