redis持久化 rdb aof 混合

前言

Redis是基于内存操作的单线程缓存中间件。

一 RDB快照(snapshot)

在默认情况下,Redis将内存数据库快照保存在dump.rdb二进制文件中,

Redis服务重新启动时根据dump.rdb文件重写Redis内存。

dump.rdb文件默认在redis安装目录下面。

可以在redis.conf中对redis快照频率进行设置。

1、save设置语法

save <seconds> <changes>

语法含义:

N秒内至少有M个变动,则自动保存一次数据快照。

比如,save 10 1,即10秒内,发生至少一次变动,则自动保存一次数据快照。

2、redis.conf修改配置

配置修改后要记得重启redis服务,让配置生效。

3、实例验证

把dump.rdb文件删掉,redis-cli连接客户端,然后进行简单set操作。

然后在redis安装目录可以看到新生成的dump.rdb文件。

dump.rdb文件内容为二进制。

如果我们再把dump.rdb文件清掉,杀掉redis进程,重新启动redis,我们会发现刚才set的key1在redis里面

没有了,因为dump.rdb被清掉了,redis重启时就恢复不了数据,所以redis重启后找不到key1。

反之,则能找到key1。

二 AOF(append only file)

rdb快照是达到条件之后进行dump.rdb备份,如果Redis因为某些原因造成故障停机,服务将会丢失最近

写入且仍未保存到快照中的那些数据。Redis针对这种丢失,从1.1版本开始增加了aof持久化方式。

1、aof持久化

aof持久化方式是将redis操作的每一条写数据指令(比如set)记录到appendonly.aof(默认文件名)文件中,

当服务重启的时候,将appendonly.aof中的指令逐条执行恢复数据到redis内存。

2、aof配置

redis.conf中将appendonly no,修改为appendonly yes,

也可以修改文件名,一般建议不用修改文件名,然后重启redis服务。

服务重启后,可以看到appendonly.aof文件。

3、实例验证

redis-cli连接客户端,然后进行简单set操作。

查看appendonly.aof文件,可以看到操作的命令存到aof文件中。

然后在进行一个简单的get操作。

再次查看appendonfly.aof文件,get命令并没有存入appendonly.aof中,

证明了redis的aof持久化存储的只是redis的写操作命令,不会存读操作命令。

我们可以通过重启服务来验证是否恢复Redis内存,如果担心dump.rdb文件影响,

先删掉dump.rdb文件再重启。

4、aof高级配置

可以配置Redis多久才将数据fsync到磁盘一次。

1)每次有新命令追加到AOF文件时就执行一次fsync:非常慢,但是非常安全,数据一般不会丢。

2)每秒fsync一次:足够快(和使用 RDB 持久化差不多),并且在故障时只会丢失1秒钟的数据。

3)从不fsync :将数据交给操作系统来处理。更快,也更不安全的选择。

推荐(并且也是默认)的措施为每秒fsync一次, 这种fsync策略可以兼顾速度和安全性。

三 RDB和AOF优缺点

rdb持久化:故障数据丢失比aof严重,但是服务重启恢复数据快;

aof持久化:故障数据丢失较rdb少,但是服务启动时恢复数据慢,因为要把aof文件中指令执行一遍。

使用rdb还是aof持久化,在于你的业务场景对数据丢失承受能力和服务启动时数据恢复快慢来决定。

但是,普通要求下,建议使用rdb快照备份。

四 混合持久化

重启Redis时,我们很少使用rdb来恢复内存状态,因为会丢失大量数据。我们通常使用AOF日志重写,

但是AOF重写性能相对rdb来说要慢很多,这样在Redis实例很大的情况下,启动需要花费很长的时间。 

Redis 4.0 为了解决这个问题,带来了一个新的持久化选项——混合持久化。

1、混合持久化

AOF在进行文件重写(aof文件里可能有太多没用指令,所以aof会定期根据内存的最新数据生成aof文件)

时将重写这一刻之前的内存rdb快照文件的内容和增量的AOF修改内存数据的命令日志文件存在一起,

都写入新的aof文件,新的文件一开始不叫appendonly.aof,等到重写完新的AOF文件才会进行改名,

原子的覆盖原有的AOF文件,完成新旧两个AOF文件的替换。

混合持久化文件结构:

2、混合持久化配置

开启混合持久化:

aof-use-rdb-preamble yes   

重启Redis服务。

3、bgrewriteaof重写AOF

AOF根据配置规则在后台自动重写aof文件,也可以人为执行命令bgrewriteaof重写AOF。 于是在Redis重启的时候,

可以先加载rdb的内容,然后再执行aof指令部分达到Redis数据重放的目的,重启效率因此大幅得到提升。

4、实例验证

通过bgrewriteaof手动重写aof。

查看appendonly.aof文件内容,看到rdb格式的二进制文件。

再执行一条set命令。

然后再看appendonly.aof文件内容。

从文件格式可以看到,混合持久化appendonly.aof文件由rdb格式和aof指令格式两大部分组成。

Redis在重启时,先重写rdb到内存,然后在重写aof到内存,重启效率高,还能减少数据的丢失。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RDBRedis Database)和AOF(Append-Only File)是Redis中两种常见的持久化方式,它们有以下区别: 1. RDB持久化RDB是将Redis数据库在某个时间点的数据快照保存到硬盘上的一种方式。它通过fork一个子进程来完成持久化操作,首先将数据写入一个临时文件,然后用这个临时文件替换上一个RDB文件,从而实现数据的持久化RDB方式适合用于备份、灾难恢复和数据库迁移等场景。 2. AOF持久化AOF是通过将Redis的写命令追加到文件的末尾来记录数据库的操作。Redis重启时,通过重新执行AOF文件中的命令来恢复数据库状态。相比于RDB方式,AOF可以提供更高的数据安全性,因为它记录了每个写操作的历史,可以保证在Redis异常退出或宕机时不会丢失数据。AOF方式适合用于数据持久化和实时备份等场景。 3. RDB的优点:RDB方式对于数据恢复速度较快,在大规模数据恢复时比AOF更高效。由于RDB是一个紧凑的二进制文件,相对于AOF文件来说更小,可以节省存储空间。此外,RDB方式对Redis的性能影响较小。 4. AOF的优点:AOF方式可以提供更高的数据安全性,因为它记录了每个写操作的历史,可以保证在Redis异常退出或宕机时不会丢失数据。AOF文件是一个文本文件,易于理解和修改。 总结来说,RDB方式适合于备份和灾难恢复,而AOF方式适合于数据持久化和实时备份。在选择持久化方式时,需要根据实际需求进行权衡和选择。另外,也可以同时使用RDBAOF两种方式,以提供更好的数据安全性和灾难恢复能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值