Redis里面的aof和rdb

本文深入探讨Redis的两种持久化机制:RDB和AOF。RDB通过快照方式保存内存数据到磁盘,适用于大规模数据恢复,但数据完整性较低;AOF采用日志形式记录每次写操作,确保数据一致性,但文件可能较大。文章详细讲解了两种机制的配置、触发条件及优缺点。

Redis里面的持久化:RDB和AOF

关于redis里面的持久化方案有两种:
RDB(Redis DataBase)
AOF(Append Only File)

关于Rdb
这是redis里面默认提供的一套持久化技术方案,专门用于保证内存中的数据被写入到磁盘里面去。主要配置是修改相应的redis.conf来实现
在这里插入图片描述
redis里面的这一行主要是用于将数据持久化在redis的dump.rdb文件里面,然后每一次开启redis的时候都会将里面的数据重新加载,进行数据恢复。(dump.rdb的存放位置由下边的dir来标识)
在这里插入图片描述
这一段配置主要是rdb的核心规则配置内容:
save <指定时间间隔> <执行指定次数更新操作> (默认是save 900 1)
举个例子来说:
save m n
也就是说m秒类如果进行了n次操作,就会将数据存储到dump.rdb文件中去。
rdb里面并不是单纯将数据直接存储起来,而是通过一种特定的lzf压缩方式来实现的:
在这里插入图片描述
这个配置开关最好打开(默认开启),否则会导致rdb文件过大,占用磁盘空间。

触发rdb存储机制的条件:
1.显示执行save指令(但是这是一种阻塞式指令)
在这里插入图片描述
2.执行flushall指令的时候,清空所有数据
3.执行shutdown指令
4.在指定时间间隔,操作次数达到save配置的数目

通常我们都会对rdb文件做相应的备份处理。

RDB的优缺点
优点:
1.对于一致性,数据完整性要求不高的情况下,这种类型的持久化处理会比较适合
2.适用于大规模的数据恢复

缺点:
1.需要开启一个额外的线程来进行数据存储,会占用内存空间(此时是两倍的内存空间)
2.数据的完整性和一致性不高,如果在最后一次备份的时候宕机了,就会导致部分数据丢失。

接下来我们来演示一段redis里面进行rdb数据恢复的过程
首先我们需要修改rdb的配置信息

  [root@idea-centos bin]# vim redis.conf

修改内容

    save 900 1
    save 120 5
    save 60 10000


[root@idea-centos bin]# ./redis-server redis.conf
[root@idea-centos bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> set key2 value2
OK
127.0.0.1:6379> set key3 value3
OK
127.0.0.1:6379> set key4 value4
OK
127.0.0.1:6379> set key5 value5
OK
127.0.0.1:6379> set key6 value6
OK
127.0.0.1:6379> SHUTDOWN
not connected> QUIT
[root@idea-centos bin]# cp dump.rdb dump_bk.rdb
[root@idea-centos bin]# ./redis-server redis.conf
[root@idea-centos bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> FLUSHALL 
OK
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> SHUTDOWN
not connected> QUIT
[root@idea-centos bin]# cp dump_bk.rdb  dump.rdb
cp: overwrite `dump.rdb'? y
[root@idea-centos bin]# ./redis-server redis.conf
[root@idea-centos bin]# ./redis-cli -h 127.0.0.1 -p 6379
127.0.0.1:6379> keys *
1) "key5"
2) "key1"
3) "key3"
4) "key4"
5) "key6"
6) "key2"

ps:一般情况下我们很少会用flushall指令和shutdown指令,这里只是为了模拟测试才使用的。

AOF方式持久化
为了弥补rdb的不足之处,数据的不一致性,aof出现了。它是采用日志的形式来将每一次写操作都进行记录,追加到相应的文件中去。Redis重启的时候会根据日志文件的内容从前到后执行一次。
首先我们需要开启appendonly选项

同时还需要指定文件的位置:

除此之外还有相应的aop日志更新条件可以查看:

AOF的快照处理方式:
always:同步持久化,每次发生数据变化会立刻写入到磁盘中。性能较差当数据完整性比较好(慢,安全)
everysec:出厂默认推荐,每秒异步记录一次(默认值)
no:不同步

关于AOF的重写机制
上边在写rdb重写机制的时候有讲到过rdb文件压缩的原理是使用算法将二进制文件进行压缩,而对于AOF来说,aof是采用去除无效命令的方式来进行空间压缩的。
例如说同一个key进行了重复的插入,那么就只保留最后一次插入的数据。
AOF里面出发该机制的条件可以在conf文件里面进行配置:
触发机制:当AOF文件大小是上次rewrite后大小的一倍且文件大于64M时触发。不过一般64m太小了。

重写的原理:
AOF会开启一条后台进程来读取内存中的数据,先写入到一个临时文件里面,然后替换旧有的aof文件。
AOF优缺点:
数据的完整性和一致性会更高
由于aof记录内容过多,文件会不断变大,数据恢复变慢。

### Redis AOF RDB 的区别及使用场景对比 Redis 提供了两种持久化方式:RDBRedis Database Backup) AOF(Append Only File)。以下是它们的区别、特点以及适用场景的详细分析。 #### 1. 基本概念 - **RDB** 是一种快照式持久化,它会在指定的时间间隔内将内存中的数据集保存到磁盘上,生成一个二进制文件。这种方式类似于“定期备份”[^1]。 - **AOF** 是一种日志式持久化,它会记录每个写操作的命令,并以文本形式追加到文件中。当 Redis 重启时,可以通过重新执行这些命令来恢复数据[^2]。 #### 2. 数据安全性与一致性 - **RDB** 的数据安全性较低,因为它依赖于定时触发的快照机制。如果在两次快照之间发生故障,可能会丢失这段时间内的数据[^5]。 - **AOF** 提供更高的数据安全性,因为它可以实时或接近实时地记录每个写操作。通过配置 `appendfsync` 参数为 `everysec` 或 `always`,可以减少数据丢失的风险[^3]。 #### 3. 性能表现 - **RDB** 在性能方面优于 AOF,特别是在写操作频繁的场景下。由于 RDB 不需要每次写操作都同步到磁盘,因此对性能的影响较小[^4]。 - **AOF** 的性能取决于 `appendfsync` 的配置: - `always`:每次写操作都会同步到磁盘,性能最低,但数据最安全。 - `everysec`:每秒同步一次,性能较好,且数据丢失风险较低。 - `no`:由操作系统决定何时同步,性能最高,但数据丢失风险较大[^3]。 #### 4. 文件大小与恢复速度 - **RDB** 文件通常比 AOF 文件小,因为它是经过压缩的二进制格式。此外,RDB 文件的恢复速度也更快,适合处理大规模数据集[^4]。 - **AOF** 文件较大,因为它记录了所有的写操作命令。虽然 AOF 支持重写(rewrite)功能以减小文件体积,但仍然可能比 RDB 文件大得多[^4]。 #### 5. 使用场景 - **选择 RDB 的场景**: - 对数据丢失容忍度较高,能够接受数分钟内的数据丢失[^3]。 - 需要快速恢复大规模数据集的场景。 - 数据可以阶段性地无丢失,恢复点由人工维护。 - **选择 AOF 的场景**: - 对数据一致性要求较高,不能容忍任何数据丢失[^3]。 - 写操作频繁且需要实时或接近实时持久化的场景。 - 需要在灾难恢复时尽量减少数据丢失量。 #### 6. 双持久化策略 为了兼顾数据安全性性能,可以同时开启 RDB AOF 持久化。在这种情况下,Redis 重启时会优先使用 AOF 文件进行恢复,从而降低数据丢失的可能性。 ### 示例代码 以下是一个简单的 Redis 配置示例,展示了如何启用 RDB AOF 持久化: ```conf # 启用 RDB 持久化 save 900 1 save 300 10 save 60 10000 # 启用 AOF 持久化 appendonly yes appendfsync everysec ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值