Redis奔溃了快看看有没开启持久化

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介: Reis作为一个内存数据库,整个数据库状态都存储在内存里,如果在运行过程中发生崩溃,那整个数据库状态可就完全不见了,相当于整个服务器被初始化。Redis在这方面肯定有所作为,我们来看看它做了什么功夫~

Reis作为一个内存数据库,整个数据库状态都存储在内存里,如果在运行过程中发生崩溃,那整个数据库状态可就完全不见了,相当于整个服务器被初始化。Redis在这方面肯定有所作为,我们来看看它做了什么功夫~

🌱以【面试官面试】形式覆盖Java程序员所需掌握的Java核心知识、面试重点,本博客收录在我开源的《Java学习指南》中,会一直完善下去,希望收到大家的 ⭐ Star ⭐支持,这是我创作的最大动力: https://github.com/hdgaadd/JavaGetOffer

在这里插入图片描述

1. Redis持久化

面试官:知道Redis持久化吗?

知道的面试官,Redis本身是一个基于内存的数据库,它提供了RDB持久化、AOF持久化两种方式可以将存储在内存中的数据库状态保存到磁盘中。

前者是保存了整个Redis数据库状态,而后者是保存了从Redis启动后所有执行的写命令。

1.1 生成RDB文件

面试官:那你说一说Redis生成RDB文件的命令是什么?

有两个,一个是SAVE命令,一个是BGSAVE命令,执行命令后会在根目录生成名为dump.rdb的文件。

# 手动生成RDB文件指令
127.0.0.1:6379> save
OK
127.0.0.1:6379> bgsave
Background saving started

RDB文件是在Redis启动时自动载入,如果把dump.rdb文件删除,重启Redis后会发现原先的数据库状态都不存在了。

# 初始化
127.0.0.1:6379> set name JavaGetOffer
OK
127.0.0.1:6379> get name
"JavaGetOffer"
127.0.0.1:6379> save
OK

# 重启Redis
127.0.0.1:6379> get name
"JavaGetOffer"

# 删除dump.rdb,重启Redis
127.0.0.1:6379> get name
(nil)

1.2 生成AOF文件

面试官:AOF文件生成呢?

AOF文件生成需要在Redis配置文件配置appendonly的属性值。

appendonly yes

重启Redis执行写命令后,会生成appendonly.aof文件。

也可以在终端手动设置appendonly属性值。

config set appendonly yes

在这里插入图片描述

1.3 两种命令的选择

面试官:是你的话,你会在什么场景使用什么命令?

是这样的,SAVE命令会阻塞Redis服务器进程,直到RDB文件创建完毕为止,在服务器进程阻塞期间,服务器不能处理其他任何命令请求。

而BGSAVE命令则不进行阻塞,它会派生出一个子进程,然后由子进程负责创建RDB文件,服务器进程继续处理命令请求。可以在上面的指令中看到执行BGSAVE指令后,终端显示Background saving started

所以如果在业务高峰期要使用进行RDB持久化,建议是使用后者,可以防止某些请求丢失了。

2. AOF重写

面试官:知道AOF文件重写吗?

知道的。AOF文件是AOF持久化的产物,AOF持久化通过保存服务器所有执行的写命令来记录数据库状态。而AOF文件重写主要是为了解决AOF文件体积膨胀的问题。

对于一个键值对,AOF旧的文件会保存数十条对该键值对的修改命令,这样浪费了大量内存空间。

而AOF文件重写可以创建一个新的AOF文件来替代现有的AOF文件,新旧两个AOF文件所保存的数据库状态相同,但新AOF文件不会包含任何浪费空间的冗余命令,使得新的AOF文件体积很小。

简单来说,就是新的AOF文件只会保存键值对的最终状态的创建命令

2.1 多条命令记录键值

面试官:那照你这么说,只会保存创建命令,那每个键的创建只有一条命令对吧?

不是的。这样的话在执行命令时可能会造成客户端输入缓冲区溢出。

所以Redis重写程序在处理列表、哈希表、集合、有序集合这四种可能会带有多个元素的键时,如果元素的数量超过了redis.h/REDIS_AOF_REWRITE_ITEMS_PER_CMD常量的值,那么重写程序将使用多条命令来记录键的值,而不单单只使用一条命令。

2.2 AOF重写缓冲区

面试官:那你说说AOF重写过程中,有新的创建请求进来怎么办?

可以把这些新的创建请求写入到一个缓冲区里。

是这样,Redis服务器会维护一个AOF重写缓冲区,该缓冲区会在子进程创建新AOF文件期间,记录服务器执行的所有写命令。

等新的AOF文件创建完成,Redis服务器会将重写缓冲区中的所有内容追加到新AOF文件的末尾,从而保证两个新旧AOF文件状态一致。

在这里插入图片描述

未完待续。。。

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

相关实践学习
基于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
相关文章
|
5天前
|
监控 NoSQL 测试技术
【赵渝强老师】Redis的AOF数据持久化
Redis 是内存数据库,提供数据持久化功能,支持 RDB 和 AOF 两种方式。AOF 以日志形式记录每个写操作,支持定期重写以压缩文件。默认情况下,AOF 功能关闭,需在 `redis.conf` 中启用。通过 `info` 命令可监控 AOF 状态。AOF 重写功能可有效控制文件大小,避免性能下降。
|
5天前
|
存储 监控 NoSQL
【赵渝强老师】Redis的RDB数据持久化
Redis 是内存数据库,提供数据持久化功能以防止服务器进程退出导致数据丢失。Redis 支持 RDB 和 AOF 两种持久化方式,其中 RDB 是默认的持久化方式。RDB 通过在指定时间间隔内将内存中的数据快照写入磁盘,确保数据的安全性和恢复能力。RDB 持久化机制包括创建子进程、将数据写入临时文件并替换旧文件等步骤。优点包括适合大规模数据恢复和低数据完整性要求的场景,但也有数据完整性和一致性较低及备份时占用内存的缺点。
|
1月前
|
存储 缓存 NoSQL
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
35 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
|
1月前
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
25 2
|
1月前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
56 1
|
2月前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
2月前
|
存储 缓存 NoSQL
Redis 大 Key 对持久化的影响及解决方案
Redis 大 Key 对持久化的影响及解决方案
43 1
|
2月前
|
存储 NoSQL 安全
8)详解 Redis 的配置文件以及数据持久化
8)详解 Redis 的配置文件以及数据持久化
37 0
|
2月前
|
存储 缓存 NoSQL
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
87 0

相关产品

  • 云数据库 Tair(兼容 Redis)