Redis持久化的两种方法

持久化

首先我们说下什么是持久化,持久化是将程序数据在持久状态和瞬时状态间转换的机制。通俗的讲,就是瞬时数据(比如内存中的数据,是不能永久保存的)持久化为持久数据(比如持久化至数据库中,能够长久保存)。另外我们使用的 Redis 之所以快就是因为数据都存储在内存当中,为了保证在服务器出现异常过后还能恢复数据,所以就有了 Redis 的持久化。

RDB 和 AOF

前面说了什么是持久化,现在说说 Redis 的持久化,众所周知 Redis 的持久化有两种方式,一种是快照形式 RDB,另一种是增量文件 AOF。两种方式都可以通过配置redis.conf文件来实现。

RDB

RDB 持久化方式是会在一个特定的时间间隔里面保存某个时间点的数据快照,我们拿到这个数据快照过后就可以根据这个快照完整的复制出数据,这个快照可以理解为数据的备份文件。

RDB 的实现主要是通过创建一个子进程来实现 RDB 文件的快照生成,通过子进程来实现备份功能,不会影响主进程的性能。同时上面也提到 RDB 的快照文件是保存一定时间间隔的数据的,这就会导致如果时间间隔过长,服务器出现异常还没来得及生成快照的时候就会丢失这个间隔时间的所有数据;那有同学就会说,我们可以把时间间隔设置的短一点,但是如果间隔时间设置过短,对系统性能还是会有影响的,特别是在数据量大的情况下,对于性能有高要求的环境是不允许这种情况出现的。

我们可以在 redis.conf 进行 RDB 的相关配置,配置生成快照的策略,以及日志文件的路径和名称。还有定时备份规则,如下图所示,里面的注释写的很清楚,简单说就是在多少时间以内多少个 key 变化了就会触发快照。如save 300 10 表示在 5 分钟内如果有 10 个 key 发生了变化就会触发产生快照,其他的同理。

除了我们在配置文件中配置自动生成快照文件之外,Redis 本身提供了相关的命令可以让我们手动生成快照文件,分别是 SAVE 和 BGSAVE ,这两个命令功能相同但是方式和效果不一样,SAVE 命令执行完后阻塞服务器进程,阻塞过后服务器就不能处理任何请求,所以在生产上不能用,和SAVE 命令直接阻塞服务器进程的做法不同,BGSAVE 命令是生成一个子进程,通过子进程来创建 RDB 文件,主进程依旧可以处理接受到的命令,从而不会阻塞服务器,在生产上可以使用。

AOF

AOF 是一种保存执行命令的形式,它跟 RDB 的区别是,AOF 并不是把数据保存下来,而是保存执行的动作。在开启 AOF 功能的时候,客户端连接后执行的每一条命令都会被记录下来。

AOF 是追加命令格式的文件,同样的我们可以定义多长时间把数据同步一次,Redis 本身提供了三种策略来实现命令的同步,分别是不进行同步,每秒同步一次,以及当有查询的时候同步一次。默认的策略也是使用最多的策略就是每秒同步一次,有了这种机制,AOF 会比 RDB 可靠很多,但是因为文件里面存的是执行的命令,所以AOF 的文件一般也会比 RDB 的文件大。

Redis 的 AOF 功能,默认是没有开启的,我们可以通过在配置文件中配置appendonly yes 来开启,同时配置同步策略appendfsync everysec 开启每秒钟同步一次,我们拿到 AOF 文件过后,可以根据这个文件恢复数据。

文件载入顺序

上面我们提到了Redis 的两种持久化方案,并且两种方案都会生成对应的文件,Redis 在恢复数据的时候会以 AOF 文件为优先。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值