Redis_AOF_RDB 持久化_1|学习笔记

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习 Redis_AOF_RDB 持久化_1

开发者学堂课程【Redis 数据库入门Redis_AOF_RDB 持久化_1】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/15/detail/55


Redis_AOF_RDB 持久化_1


内容介绍:

一、概述

二、RDB 持久化


Redis 作为一类数据库,其数据是存储在内存里,必定需要具有持久化的特点,本节课学习的内容是 Redis 持久化。


一、概述

1、定义

Redis 持久化(persistence)是指将数据从掉电易失的内存放到永久存储的设备上面,简单来说就是将数据落到磁盘。


2、需要持久化的原因

Redis 需要持久化的原因十分简单,Redis 数据库所有的数据都在内存里面,一旦掉电了,或服务器宕机,数据就会丢失。据此推论,提出以下三种假设:

(1)如果将 Redis 作为缓存服务器,需要持久化吗?

如果将 Redis 作为缓存服务器是否需要持久化应视情况而定,如果对Redis不做持久化处理,你数据如果作为缓存服务器的 Redis 宕机,则相当于所有的数据请求压力将直接全部由 Web 服务器负载。此时若数据请求量很大,Web 服务器是否能承受如此大的负荷是一个难题。若较长期处于该种状态,Web 服务器很容易崩溃,也就是出缓存穿透问题。故而在这种数据请求量较大的情况下,最好对 Redis 做持久化处理,当 Redis 缓存服务器重启时,缓存不会丢失。反之,则会导致缓存穿透,Web 服务器崩溃。

(2)如果将 Redis 作为内存数据库,需要持久化吗?

如果将真正的数据,如业务数据等存到 Redis 数据库中,则此时必须对 Redis 做持久化处理。

(3)如果将 Redis 作为消息队列,需要持久化吗?

同样要视情况而定,若是一些不重要的消息,则可以不对其做持久化处理,若是重要的消息,最好进行持久化处理。


3、持有化的方式

Redis 持久化的方式包括一下两种:

(1)RDB(Redis DB)

该种持久化的方式是将真正的数据存储到磁盘里,其中存储的是真正的数据。

(2)AOF(Append Only File)

Append 是“追加”的意思,也就是说该种持久化的方式是将对数据的操作的命令追加到文件重,其中存储的数据是一条条执行的命令。

总之,两种持久化的方式中,存储的数据内容不同,前者存储的是真实的数据,贰后者存储的是执行的命令。在默认情况下,AOF 是不开启的,在配置文件里面中显示“no”,而 RDB 是开启的其实开启的。

4、总结

(1)因为 Redis 服务器将数据存储在内存中,而一旦服务器被关闭,或者运行服务器的主机被关闭时,数据就回丢失;

(2)如果仅仅将 Redis 作为缓存服务器,数据丢失的带来问题的不是很大,当然也要视情况而论。在一般情况下,只需要重启机器,再次将数据放到缓存里即可。而如果在重启机器,再重新加载数据,将其重新放到缓存里时,所用的时间较短,则这种方式不会存在太大问题,若该过程需要很长的时间,则容易导致缓存穿透,在这种情况下将 Redis 用作数据库,导致的数据丢失则会影响较大;

(3)为了在 Redis 服务器关闭时,仍然保留数据库中数据,Redis 提供了 RDB 和AOF 两种持久化功能,两者都是以文件形式将数据保存到硬盘中。因此,当进行过持久化处理后,即使服务器关闭,已经保存在硬盘里的数据也不会丢失。

(4)除此之外,服务器也可以在重启的时候呢,通过载入持久化文件还原服务器关闭之前的数据以进行数据恢复。这种持久化的数据,甚至可以将其转移到其他的机器中,或者将其上传到磁盘文件中。


二、RDB 持久化

1、功能

RDB 持久化可以将服务器包含的所有数据库中的数据以二进制文件的形式保存在硬盘中,而二进制的文件形式比较节省空间。通过 RDB 持久化之后,在硬盘中创建新的以 rdb 为后缀的文件,如上节课在配置文件中看到的 dump.rdb,这个是默认文件名称。

服务器启动时,会再次载入 RDB 文件,服务器可以根据 RDB 文件的内容,还原服务器原有数据库的情况。

2、创建 RDB 文件的方式

(1)最常见的形式

在 Redis 服务器中创建二进制 RDB 文件有多种方式,以下三种是最常见的方式:

①服务器执行客户端发送的 SAVE 命令。通过 SAVE 命令直接创建 RDB 文件;

②服务器执行客户端发送的 BGSAVE 命令。从其名称分析,BG 是 background 的缩写,而 background 是“后台”的意思,也就是在后台创建 RDB 文件。换言之,直接 SAVE 命令会阻塞当前的服务,而执行 BGSAVE 命令不会阻塞当前的服务,因此从这一点看,后者更好,因为一般情况下,用户不希望阻塞当前的服务状态,如果用户或者数据库本身在空闲的情况下,直接执行 SAVE 命令也没有问题,但如果在较忙情况下,则可以通过 BGSAVE 命令来创建。

③在配置文件中设定条件,使用 save 配置选项设置的自动保存条件被满足,服务器会自动执行 BGSAVE 命令自动创建 RDB 文件。这种方法最常用的,因为前两种方式需要用户手动执行,第三种则是自动执行,一般情况下,用户不会选择手动创建 RDB 文件,而采用根据配置条件自动创建。而自动创建的方式中其实使用的是BGSAVE 命令在后台执行。

(2)各种方式的不同之处

前两种需要用户手动执行来创建 RDB 文件,也就是通过用户手动发送 SAVE 命令或BGSAVE 命令,创建 RDB 文件。

①在客户端当前输入 SAVE:

redis > SAVE

a.在执行 SAVE 命令时,redis 服务器将会被阻塞,无法处理客户端发送的命令请求,只有 SAVE 命令执行结束之后(或 RDB 文件创建完毕后),服务器才会重新开始处理客户端发送的请求。

b.如果 RDB 文件已经存在,那么服务器将自动使用新的 RDB 文件去代替旧的 RDB文件。之前我们提到过会生成 dump.rdb,在下一时刻如果满足了设置的条件或者人工输了 SAVE 命令或 BGSAVE 命令,即会生成新的 dump.rdb 覆盖掉之前的 RDB文件。

为保留原本的 dump.rdb 文件,可以在任务框中写入定时任务,定期的之前的dump.rdb 转移。如某人创建了 flashdb,紧接输入了 save,就会创建一个新的RDB,那么之前的数据就无法恢复。所以,在实际操作过程中,可以在 contable中写入任务,定时将其转移,以转移的时刻为名称,则可根据恢复数据的需要将某个特定时刻的 dump 传回,再重启服务器,即可恢复数据。

在客户端输入 SAVE 后,Redis 服务器会被阻塞,继而创建二进制的 RDB 文件,如下图所示:

image.png

②在客户端输入 BGSAVE 命令

该命令同样可以创建 RDB 文件,但区别在于不会造成 redis 服务器阻塞,其原理如下图所示:

 image.png

客户端发出保存数据的命令,Redis 服务器返回“OK”。

实际上在返回“OK”之后,Redis 服务器会紧接着fork一个image.png

子进程,转而由子进程创建 RDB 文件,而真正的 redis 服务器仍旧会提供读写服务并不会被阻塞。而子进程在创建完 RDB 文件后,再返回到 Redis 服务器“RDB创建完成”的信息。

但是对于客户来说,当写入 BGSAVE 后,就直接进行了创建 RDB 的过程。这个文件会写入到 etc/redis/6379.conf,这是服务之后配置文件的所在路径。输入vim/etc/redis/6379.conf 即可查询其配置文件,可以从中找到关于 RDB 的部分。找到其中 save the DB on the disk,其中包括 save,seconds,changes,

下面会显示:

save  900  1

save  300  10

save  60  10000

这三行数据分别指三种持久化的方式,即 SAVE、BGSAVE 及在配置文件中写入条件,前两种为手动,第三种为自动,条件会在后面介绍。文件中还显示rdb compression yes,rdb checksum yes 也就是在配置过程中还会作压缩和检查,落地的文件名称显示为 rdb file name  dump.rdb,当然文件名称可以修改,文件的存储路径显示为 var/lib/redis/6379。

将其拷贝之后查询,可以看到的当下(课程中为15:45)转移的 RDB 文件,是15:45因为满足了刚才配置文件里面条件,因此创建了 RDB 文件。


当然,也可以手动 SAVE,输入 redis>save,由于当下服务器中文件较少,因此保存的速度很快。该过程中实际上发生了阻塞,压缩检查后显示“OK”。退出后再次查询即可看到刚生成的文件。

BGSAVE 也与之相同,会 fork 子进程来完成该项工作,显示为“Background saving started”,说明子进程开始工作,但可以继续进行查询等功能。创建完成后回生成新的RDB文件,如课程中显示为16:27,即表示在16:27创建了该文件。在配置文件中也可以查询到,其中显示为logfile/var/log/redis_6379.log,即为日志配置的路径,logfail 里面有他。


在服务器中查询服务器启动时的日志,其种最后一行代码中显示:

在16:27,“Background saving terminated with success”,

说明在16:27时该文件存储完毕;同时在16:26时显示“DB

saved on disk”;在15:45时也同样自动进行了“Background

saving terminated with success”操作。当然根据定时任务,前

面也进行了多次同样的操作。

同时,日志文件中也可以显示每次保存的文件大小,格式为 RDB:6MB of memory by copy-on-write,也就是说该次自动保存过程中保存了六兆的。这 6MB 的文件中包含有额外信息,可以检查日志进行检索。

相关实践学习
基于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
相关文章
|
7天前
|
存储 NoSQL Redis
Redis 持久化揭秘:选择 RDB、AOF 还是混合持久化?
Redis 是一个内存数据库,意味着它主要将数据存储在内存中,从而能够提供极高的性能。然而,作为内存数据库,Redis 默认情况下的数据不会永久保存。为了确保数据在重启或故障后能够恢复,Redis 提供了几种 **持久化机制**。这些机制允许 Redis 将内存中的数据保存到硬盘上,从而实现数据持久化。
61 22
Redis 持久化揭秘:选择 RDB、AOF 还是混合持久化?
|
21天前
|
NoSQL 安全 Redis
redis持久化策略
Redis 提供了两种主要的持久化策略:RDB(Redis DataBase)和AOF(Append Only File)。RDB通过定期快照将内存数据保存为二进制文件,适用于快速备份与恢复,但可能因定期保存导致数据丢失。AOF则通过记录所有写操作来确保数据安全性,适合频繁写入场景,但文件较大且恢复速度较慢。两者结合使用可增强数据持久性和恢复能力,同时Redis还支持复制功能提升数据可用性和容错性。
44 5
|
1月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
43 5
|
1月前
|
监控 NoSQL 测试技术
【赵渝强老师】Redis的AOF数据持久化
Redis 是内存数据库,提供数据持久化功能,支持 RDB 和 AOF 两种方式。AOF 以日志形式记录每个写操作,支持定期重写以压缩文件。默认情况下,AOF 功能关闭,需在 `redis.conf` 中启用。通过 `info` 命令可监控 AOF 状态。AOF 重写功能可有效控制文件大小,避免性能下降。
|
1月前
|
存储 监控 NoSQL
【赵渝强老师】Redis的RDB数据持久化
Redis 是内存数据库,提供数据持久化功能以防止服务器进程退出导致数据丢失。Redis 支持 RDB 和 AOF 两种持久化方式,其中 RDB 是默认的持久化方式。RDB 通过在指定时间间隔内将内存中的数据快照写入磁盘,确保数据的安全性和恢复能力。RDB 持久化机制包括创建子进程、将数据写入临时文件并替换旧文件等步骤。优点包括适合大规模数据恢复和低数据完整性要求的场景,但也有数据完整性和一致性较低及备份时占用内存的缺点。
|
2月前
|
存储 缓存 NoSQL
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
53 2
大数据-45 Redis 持久化概念 RDB AOF机制 持久化原因和对比
|
2月前
|
消息中间件 分布式计算 NoSQL
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
大数据-41 Redis 类型集合(2) bitmap位操作 geohash空间计算 stream持久化消息队列 Z阶曲线 Base32编码
29 2
|
2月前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
72 1
|
3月前
|
存储 缓存 NoSQL
Redis 大 Key 对持久化的影响及解决方案
Redis 大 Key 对持久化的影响及解决方案
59 1
|
3月前
|
存储 NoSQL 安全
8)详解 Redis 的配置文件以及数据持久化
8)详解 Redis 的配置文件以及数据持久化
46 0