Redis_AOF_RDB 持久化_3|学习笔记

简介: 快速学习 Redis_AOF_RDB 持久化_3

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

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


Redis_AOF_RDB 持久化_3

内容介绍:

一、AOF持久化文件配置

二、文件路径与内容配置实操


一、AOF 持久化文件配置

1、AOF 持久化阻塞服务

AOF 持久化的默认操作其实是阻塞服务的,但是这种阻塞造成的影响并不大,因为其实际上是追加一条命令的行为,造成的阻塞的时间很短,尤其是相较于RDB持久化过程中需要传输所有的数据,AOF 持久化较快。

默认情况下 append only 值是“no”,也就是说默认情况没有开启机制。如果开启机制,append file name 就会落到 append only.aof 文件,也就是落在 AOF 文件中。配置文件中“APPEND ONLY MOOD”部分包含“By default Redis asynchrononously dumps dataset on disk.This mode is good enough in many applications”的一段信息,表明默认情况下把 append only 这种模式加上,大部分应用其实就可以被满足了,因为它丢失的是一秒内的数据,而很多应用是用它来做缓存,一秒的数据的丢失可以被许多应用接受。


2、默认值

上节课中提到,AOF 持久化有三种策略,即a lways,everysec 和 no。在默认配置文件中显示 appendfaync everysec,说明 everysec 是默认值。


3、AOF 文件中的冗余命令

配置文件中还包括两个条件,即“auto-aof-rewrite-percentage 100”和“auto-aof-rewrite-min-size 64mb”,即 AOF 文件中的冗余命令。

(1)冗余命令

冗余命令是指随着服务器不断的运行,为了记录数据库发生的变化,服务器会将越来越多的命令写到 AOF 文件里,AOF 文件的容量不断的增大。为了让 AOF 文件大小控制在合理范围内,避免其胡乱增长,Redis 提供了一些重写 AOF 文件的机制。

(2)AOF 重写实例

下图为重写前后的 AOF 文件对比:

image.png

当原有的 AOF 文件如果达到了配置文件里面的条件,它就会进行重写,重写之后的AOF 文件短了很多。

①“SELECT 0”选择某个数据库,命令十分简短,没有重写的必要;

②在该数据库中,进行了连续的4个 SADD 操作“SADD fruits apple”“SADD fruits banana”“SADD fruits cherry”“SADD fruits apple”,等价于批量同时添加多个元素。此时,就可以把4条命令整合为一个命令“SADD fruits ‘apple’‘banana’‘cherry’”。

③“INCR counter”、“INCR counter”与“DEL counter”

写入可两个counter之后又删除了 counter,所以重写之后的AOF文件中就没有再出现counter。

④SET msg“hello world”与SET msg“hello wold again!”

重写后直接保留 SET msg“hello wold again!”。

⑤RPUSH Ist 1 3 5、RPUSH Ist 7与LPOP Ist

前两个命令是依次写入1 3 5 7,后最后一个命令“LPOP Ist”的含义是从最左侧弹出一个值,也就是弹出了“1”,所以重写后的命令就是依次写入3 5 7,即RPUSH Ist  3 5 7。

通过将多个命令合并的方式使得AOF更加简洁,进而达到重写的效果

(3)触发重写的方法

①客户端向服务器发送 BGPREWRITEAOF 命令,也就是background rewrite AOF,即可触发 AOF 文件的重写。

②通过设置配置选项让服务器自动执行 BGPREWRITEAOF 命令。自动执行命令的配置选项为:

a.auto-aof-rewrite-min-size <size> ,触发 AOF 重写的所需的最小的体积。只有AOF 文件体积大于等于 size 时,服务器才会考虑是否要进行 AOF 重写,避免体积过小的 AOF 也进行重写。在自动情况下,服务器会考虑条件。

而在默认情况下,默认值中显示“auto-aof-rewrite-min-size 64mb”,即默认值是 64MB,在实际情况中这是一个较难达到的大小。在默认条件下,文件达到 64MB 后自动重写。但 AOF 文件体积达到64    MB仅是出发文件重写的条件之一。假设,一个原本体积为 64MB 的文件经过重写体积缩小至 32MB;然后又不断对该文件追加,再次达到 64MB,再次重写,缩小至 62MB;继续追加,达到 64MB 又一次重写经过多次重写之后,即使再重写,也不可能比 64MB 更小,就会陷入循环的环境,因此需要另外的条件约束。

b.auto-aof-rewrite-percentage 100,意思是累计值达100%。通过两个条件综合,文件的体积达到64MB,且累积的大小达到了100%,即已经扩展了一倍,即会进行重写。简单来说,只有文件大小达到 64MB,然后又新增了 64MB,才触发重写,而不是每次达 64MB 都进行重写。

以此类推,若经过重写累计至 128MB,若文件大小再到64MB时,此时的累计值没有达到100%,而只达到了50%,此时不会重写。只有下一次文件达到 128MB/新增128MB 时才会进行再次重写。也就是说只有两个条件同时满足时才会触发重写。当然触发条件可以自行配置。


4.复习

(1)创建 RDB 文件需要将服务器所有数据库的数据全部写到硬盘里,是一个非常耗时的操作,服务器需要隔一段时间才创建文件,可能会导致数据丢失。

(2)AOF 持久化会默认将每秒/每个修改的命令都追加到文件末尾。

(3)当写入到缓存区时,AOF 持久化会根据个人配置进行追加文件(默认是每个隔一秒写入一次)。

(4)RDB 持久化与 AOF 持久化

①RDB 持久化为全量备份,一次保存整个数据库,而 AOF 持久化是在间隔之内增量备份,一次保存修改数据库的命令;

②RDB 持久化的保存间隔较长,AOF 持久化默认情况下间隔一秒;

③RDB 持久化的数据还原速度很快,直接加载数据即可,而 AOF 持久化的数据还原速度一般,如果冗余命令越多,还原速度越慢;

④RDB 持久化执行 SAVE 命令时会阻塞,执行 BGSAVE 命令时会 fork 子进程,不会阻塞服务器,而 AOF 持久化无论是平时还是进行 AOF 重写时都不会阻塞服务器。

因为其执行的命令是 BGREWRITEAOF 命令,不管是主动操作,还是默认状态都使用该条命令执行,其实是在后台进行操作,不会阻塞服务器;

⑤RDB持久化更适合数据的备份,AOF 持久化则更适合用来保存数据,通常意义上是数据持久化。在 appendfsync always 情况下,Redis 的持久化方式和一般的 SQL 数据库的持久化方式相同。

在 SQL 数据库中,比如 MySQL,它里面有 beenlog,主要用来写操作日志,其工作机制类似于此处的 always 这种机制,即每写一个操作,都会记录在日志中。而且 Redis 持久化默认是一秒记录一次。

如果要使用 Redis 来存真正的数据,且每一条数据都不允许丢失,就要将其改成always。但是实际情况下,有的数据只需要缓存,如果将仅需缓存的数据也按照always机制保存,效率可能会比较低,在这种情况下就可以开多个 Redis 服务,不同的业务可以对应不同的 Redis 服务。

比如一个端口是6379,另一个端口的是6380或者是在另外的服务器上的6379,对于不同的业务,缓存级别不同,持久化的级别也不同。

如新浪,每台服务器上面有4个 Redis 服务,整个业务里有上千个 Redi 服务,每个持久化的级别都是不同的,每个吃的话级别都是不一样的。

⑥两种持久化可以同时使用,可以保证数据的安全性。因此 Redis 数据库安全性地域SQL 数据库的安全性是个误解。

如果将其调成在 always 模式下运行,两者的持久化模式完全相同,都很严格,速度也都较慢。如果说 Redis 服务器不安全,其实是因为没有调整好配置。


二、文件路径及内容配置实操

appendonly 仍保持为“no”,进行 redis-cli 操作,手动输入“BGREWRITEAOF”命令,显示“Background append only file rewriting started”。

当然也可以不重新服务,而是手动写入一个文件 ll/Var/lib/redia/6379,结果显示新建了一个 AOF 文件 appendonly.aof。

输入 vim/var/lib/redia/6379/appendonly.a

of 进行查询,即可查看 AOF 文件中保存到所有命令。

如果该文件用来应急查询,如有人写了 flashdb 将它追加到 AOF 里,但事后不想让其保存在记录里,就可以把该命令从 AOF 文件里面清除。

因为 AOF 文件保存的即是命令,如果要删除保存的命令,直接将命令语句删除即可。而如果 flashdb 命令正好触发了 dump 的条件的话,RDB 数据发生了改变,就无法撤回该命令了。

相关文章
|
3月前
|
NoSQL 安全 关系型数据库
Redis:持久化的两种方式
Redis持久化机制主要包括RDB和AOF两种方式。RDB通过生成数据快照进行持久化,支持手动或自动触发,具有加载速度快、文件紧凑等特点,但无法实时保存数据。AOF则记录每个操作命令,保障数据更安全,支持多种写入策略,并可通过重写机制优化文件大小。两者各有优劣,常结合使用以兼顾性能与数据安全。
|
3月前
|
存储 缓存 NoSQL
Redis持久化深度解析:数据安全与性能的平衡艺术
Redis持久化解决内存数据易失问题,提供RDB快照与AOF日志两种机制。RDB恢复快、性能高,但可能丢数据;AOF安全性高,最多丢1秒数据,支持多种写回策略,适合不同场景。Redis 4.0+支持混合持久化,兼顾速度与安全。根据业务需求选择合适方案,实现数据可靠与性能平衡。(238字)
|
6月前
|
存储 监控 NoSQL
流量洪峰应对术:Redis持久化策略与内存压测避坑指南
本文深入解析Redis持久化策略与内存优化技巧,涵盖RDB快照机制、AOF重写原理及混合持久化实践。通过实测数据揭示bgsave内存翻倍风险、Hash结构内存节省方案,并提供高并发场景下的主从复制冲突解决策略。结合压测工具链构建与故障恢复演练,总结出生产环境最佳实践清单。
222 9
|
10月前
|
存储 NoSQL 安全
Redis的两种持久化方式---RDB、AOF
通过本文的介绍,我们详细讲解了Redis的两种主要持久化方式:RDB和AOF。每种方式都有其独特的优缺点和适用场景。在实际应用中,可以根据具体需求选择合适的持久化方式,或者同时启用RDB和AOF,以达到最佳效果。希望本文能帮助您更好地理解和应用Redis的持久化机制,构建高效、可靠的数据存储解决方案。
1011 79
|
9月前
|
NoSQL Redis
Redis的数据持久化策略有哪些 ?
Redis 提供了两种方式,实现数据的持久化到硬盘。 1. RDB 持久化(全量),是指在指定的时间间隔内将内存中的数据集快照写入磁盘。 2. AOF持久化(增量),以日志的形式记录服务器所处理的每一个写、删除操作 RDB和AOF一起使用, 在Redis4.0版本支持混合持久化方式 ( 设置 aof-use-rdb-preamble yes )
|
存储 NoSQL Redis
Redis 持久化揭秘:选择 RDB、AOF 还是混合持久化?
Redis 是一个内存数据库,意味着它主要将数据存储在内存中,从而能够提供极高的性能。然而,作为内存数据库,Redis 默认情况下的数据不会永久保存。为了确保数据在重启或故障后能够恢复,Redis 提供了几种 **持久化机制**。这些机制允许 Redis 将内存中的数据保存到硬盘上,从而实现数据持久化。
715 22
Redis 持久化揭秘:选择 RDB、AOF 还是混合持久化?
|
NoSQL 安全 Redis
redis持久化策略
Redis 提供了两种主要的持久化策略:RDB(Redis DataBase)和AOF(Append Only File)。RDB通过定期快照将内存数据保存为二进制文件,适用于快速备份与恢复,但可能因定期保存导致数据丢失。AOF则通过记录所有写操作来确保数据安全性,适合频繁写入场景,但文件较大且恢复速度较慢。两者结合使用可增强数据持久性和恢复能力,同时Redis还支持复制功能提升数据可用性和容错性。
233 5
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
261 5
|
监控 NoSQL 测试技术
【赵渝强老师】Redis的AOF数据持久化
Redis 是内存数据库,提供数据持久化功能,支持 RDB 和 AOF 两种方式。AOF 以日志形式记录每个写操作,支持定期重写以压缩文件。默认情况下,AOF 功能关闭,需在 `redis.conf` 中启用。通过 `info` 命令可监控 AOF 状态。AOF 重写功能可有效控制文件大小,避免性能下降。
340 6
|
存储 监控 NoSQL
【赵渝强老师】Redis的RDB数据持久化
Redis 是内存数据库,提供数据持久化功能以防止服务器进程退出导致数据丢失。Redis 支持 RDB 和 AOF 两种持久化方式,其中 RDB 是默认的持久化方式。RDB 通过在指定时间间隔内将内存中的数据快照写入磁盘,确保数据的安全性和恢复能力。RDB 持久化机制包括创建子进程、将数据写入临时文件并替换旧文件等步骤。优点包括适合大规模数据恢复和低数据完整性要求的场景,但也有数据完整性和一致性较低及备份时占用内存的缺点。
471 6