admin管理员组

文章数量:1530517

文章目录

    • 1、半持久化RDB模式
      • 1.1 RDB配置文件
      • 1.2 RDB文件
      • 1.3 RDB文件的生成与加载
      • 1.4 RDB文件生成原理
      • 1.5 手动触发RDB文件持久化
      • 1.6 RDB丢失数据
    • 2、全持久化AOF模式(append only file)
      • 2.1 AOF文件加载
      • 2.2 AOF文件存储位置
      • 2.3 AOF和RDB允许同时开启

1、半持久化RDB模式

半持久化RDB模式是Redis备份默认方式,是通过快照(snapshotting)完成的,当符合在Redis.conf配置文件中设置的条件时,Redis会自动将内存中的所有数据进行快照并存储在硬盘上,完成数据备份。

1.1 RDB配置文件

Redis进行RDB快照的条件由用户在配置文件中自定义,由两个参数构成:时间和改动的键的个数。当在指定的时间内被更改的键的个数大于指定的数值时就会进行快照。在配置文件中已经预置了3个条件:

3600秒内有至少1个键被更改则进行快照。
默认可以存在多个条件,条件之间是“或”的关系,只要满足其中一个条件,就会进行快照。

1.2 RDB文件

Redis默认会将快照文件存储在Redis数据目录,默认文件名为:dump.rdb文件,可以通过配置dir和dbfilename两个参数分别指定快照文件的存储路径和文件名。也可以在Redis命令行执行config get dir获取Redis数据保存路径。

 

1.3 RDB文件的生成与加载

生成
1)触发save的机制,会生成dump.rdb文件。

2)正常退出Redis使用,则自动保存dump.rdb文件。

3)使用flushall,也可以生成dump.rdb文件。

加载
Redis启动时,会自动读取dump.rdb文件,恢复其中的数据(将数据从硬盘载入到内存)
 

1.4 RDB文件生成原理

Redis实现快照的过程,Redis使用fork函数复制一份当前进程(父进程)的副本(子进程),父进程继续接收并处理客户端发来的命令,而子进程开始将内存中的数据写入硬盘中的临时文件,当子进程写入完所有数据后会用该临时文件替换旧的RDB文件,至此一次快照操作完成。

RDB文件是经过压缩(可以配置rdbcompression参数以禁用压缩节省CPU占用)的二进制格式,所以占用的空间会小于内存中的数据大小,更加利于传输。

1.5 手动触发RDB文件持久化

手动触发Redis进行RDB持久化的命令有两种:

1)save

该命令会阻塞当前Redis服务器,执行save命令期间,Redis不能处理其他命令,直到RDB过程完成为止。

显然该命令对于内存比较大的实例会造成长时间阻塞,这是致命的缺陷,为了解决此问题,Redis提供了第二种方式。

2)bgsave

执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。具体操作是Redis进程执行fork操作创建子进程,RDB持久化过程由子进程负责,完成后自动结束。阻塞只发生在fork阶段,一般时间很短。

手动触发是由主进程进行快照操作,会阻塞住其他请求;自动触发通过fork子进程进行快照操作。

 

1.6 RDB丢失数据

通过RDB方式实现持久化,一旦Redis异常退出,就会丢失最后一次快照以后更改的所有数据。

此时需要开发者根据具体的应用场合,通过组合设置自动快照条件的方式来将可能发生的数据损失控制在能够接受的范围。

 

2、全持久化AOF模式(append only file)

如果数据很重要无法承受任何损失,可以考虑使用AOF方式进行持久化,默认Redis没有开启AOF方式的全持久化模式。

2.1 AOF文件加载

在启动时Redis会逐个执行AOF文件中的命令来将硬盘中的数据载入到内存中,载入的速度相较RDB会慢一些,开启AOF持久化后每执行一条会更改Redis中的数据的命令,Redis就会将该命令写入硬盘中的AOF文件。

AOF文件被修改
当AOF文件被修改时,启动Redis,不会启动成功。

可以使用redis-check-rdb来恢复AOF文件(一般直接将错误的文件删除)

修改完毕之后,Redis启动成功。
 

2.2 AOF文件存储位置

AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的,默认的文件名是appendonly.aof,可以通过appendfilename参数修改该名称。
 

2.3 AOF和RDB允许同时开启

Redis允许同时开启AOF和RDB,既保证了数据安全又使得进行备份等操作十分容易。

此时重新启动Redis后Redis会使用AOF文件来恢复数据,因为AOF方式的持久化可能丢失的数据更少。

本文标签: 数据备份RedisAOFrdb