Redis 持久化的两种方式:RDB 和 AOF

        Redis的数据都是存储在内存中,为了数据的永久保存,需要把数据同步到硬盘上,这个过程就叫做持久化. Redis的持久化存在有两种方式: RDB方式,AOF方式,这两种方式可以单独使用,也可以综合使用.

一、RDB方式

1.1、执行时机

RDB持久化方式的执行时机有两种,分别是自动执行和手动执行。自动执行是需要在 Redis 配置文件中设置自动保存的条件,例如在指定的时间间隔内如果有一定数量的键发生变化,则自动触发 BGSAVE 命令。

save 900 1  
# 900秒内,如果至少有1个key被修改,则执行bgsave , 如果是save "" 则表示禁用RDB
save 300 10  
save 60 10000 

    手动执行则需要手动执行save或者bgsave命令,其中save命令会导致主进程执行RDB,这个过程中其它所有命令都会被阻塞。只有在数据迁移时可能用到。而bgsave命令可以异步执行RDB,这个命令执行后会开启独立进程完成RDB,主进程可以持续处理用户请求,不受影响。(注,redis在停机后会自动执行save命令)

1.2、原理

RDB 持久化是通过创建一个经过压缩的二进制文件来保存 Redis 数据库在某个时间点的状态。在执行 bgsave 命令时,Redis 会 fork 一个子进程,子进程负责创建 RDB 文件,而父进程则继续处理客户端请求。当子进程完成 RDB 文件的创建后,它会通知父进程,此时新的写入操作会被记录到一个临时文件中,等到下次 RDB 持久化时,这个临时文件中的内容会被合并到新的 RDB 文件中。

1.3、优点

1.生成的 RDB 文件紧凑,体积小,便于备份和恢复。

2.恢复数据的速度非常快,因为只需要将 RDB 文件加载到内存中即可。

1.4.、缺点

1.可能会丢失数据,因为只有在满足自动保存条件或手动执行保存命令时才会创建 RDB 文件,如果在这期间发生故障,可能会丢失自上次保存以来的数据。

2.在创建 RDB 文件时,会占用一定的系统资源,如果数据量较大,可能会对服务器性能产生影响。

二、AOF 持久化

2.1、执行时机

AOF 持久化是在每次执行写命令时,将命令追加到 AOF 文件中。可以通过设置 appendfsync 参数来控制 AOF 文件的同步频率,有以下三种选项:

1.always:每次执行写命令时都同步到 AOF 文件中,这种方式最安全,但性能也最低。

2.everysec:每秒同步一次 AOF 文件,这是默认选项,在性能和安全性之间取得了平衡。

3.no:由操作系统决定何时同步 AOF 文件,这种方式性能最好,但安全性最低。

AOF的触发条件可以在Redis的redis.conf文件中的APPEND ONLY MODE模块下有两条默认配置:

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

这两条配置就是触发重写aof文件的条件,第一个表示文件大小达到前一次保存文件的一倍,第二个表示aof文件大小最少达到64MB,两个条件必须同时满足。

2.2、原理

AOF采用文件追加方式,文件会越来越大为避免出现此种情况,新增了重写机制,当AOF文件的大小超过所设定的阈值时,Redis就会启动AOF文件的内容压缩,只保留可以恢复数据的最小指令集。 AOF文件持续增长而过大时,会fork出一条新进程来将文件重写(也是先写临时文件最后再rename),遍历新进程的内存中数据,每条记录有一条的Set语句。重写aof文件的操作,并没有读取旧的aof文件,而是将整个内存中的数据库内容用命令的方式重写了一个新的aof文件,这点和快照有点类似。

2.3、优点

1.数据安全性高,因为可以通过设置不同的同步频率来保证数据的持久性。

2.AOF 文件易于理解和解析,便于进行数据恢复和故障排查。

2.4、缺点

1.AOF 文件通常比 RDB 文件大,因为它记录了每一个写命令。

2.恢复数据的速度相对较慢,因为需要重新执行 AOF 文件中的所有命令。

三、两种方式的比较

1. 数据安全性

AOF 持久化的数据安全性更高,因为它可以实时记录每一个写命令,而 RDB 持久化可能会丢失数据。

2. 文件大小

RDB 文件通常比 AOF 文件小,因为它是经过压缩的二进制文件,而 AOF 文件记录了每一个写命令,所以文件会比较大。

3. 恢复速度

RDB 持久化的恢复速度更快,因为只需要将 RDB 文件加载到内存中即可,而 AOF 持久化需要重新执行所有的写命令。

4. 资源占用

在创建 RDB 文件时,会占用一定的系统资源,如果数据量较大,可能会对服务器性能产生影响。而 AOF 持久化在执行写命令时会不断追加到 AOF 文件中,也会占用一定的系统资源,但相对来说影响较小。

四、总结

Redis 的 RDB 和 AOF 持久化方式各有优缺点,在实际应用中,可以根据具体的需求来选择合适的持久化方式。如果对数据安全性要求较高,可以选择 AOF 持久化;如果对恢复速度要求较高,可以选择 RDB 持久化。也可以同时使用两种持久化方式,以提高数据的安全性和恢复速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值