redis持久化
引出
Redis 是一个内存数据库,所以其运行效率非常高。但也存在一个问题:内存中的数据是不持久的,若主机宕机或 Redis 关机重启,则内存中的数据全部丢失。当然,这是不允许的。
Redis 具有持久化功能,其会按照设置以快照或操作日志的形式将数据持久化到磁盘。 根据持久化使用技术的不同,Redis 的持久化分为两种:RDB 与 AOF。
需要注意的是,RDB是默认持久化方式,但 Redis 允许 RDB 与 AOF 两种持久化技术同时开启。不过如果同时存在两种持久化方式,会默认采取AOF的方式,AOF持久化方式的优先级更高。
无论是哪种持久化方式,需要配置相关信息时,都是在redis.conf文件中进行操作。
RDB持久化
RDB,Redis DataBase,是指将内存中某一时刻的数据快照全量写入到指定的 rdb 文件的持久化技术。RDB 持久化默认是开启的。当 Redis 启动时会自动读取 RDB 快照文件,将数据 从硬盘载入到内存,以恢复 Redis 关机前的数据库状态。
持久化的执行
RDB 持久化的执行有三种方式:手动 save 命令、手动 bgsave 命令,与自动条件触发。
1. 手动 save 命令
通过在 redis-cli 客户端中执行 save 命令可立即进行一次持久化保存。save 命令在执行期 间会阻塞 redis-server 进程,直至持久化过程完毕。而在 redis-server 进程阻塞期间,Redis 不能处理任何读写请求,无法对外提供服务。
2. 手动 bgsave 命令
通过在 redis-cli 客户端中执行 bgsave 命令可立即进行一次持久化保存。不同于 save 命 令的是,正如该命令的名称一样,background save,后台运行 save。bgsave 命令会使服务器 进程 redis-server 生成一个子进程,由该子进程负责完成保存过程。在子进程进行保存过程 中,不会阻塞 redis-server 进程对客户端读写请求的处理。
3. 自动条件触发(重点)
自动条件触发的本质仍是 bgsave 命令的执行。只不过是用户通过在配置文件中做相应的设置后,Redis 会根据设置信息自动调用 bgsave 命令执行。
save(几秒内几次写操作快照)
语法格式:
save 时间段 操作次数
该配置用于设置快照的自动保存触发条件,即 save point,保存点。
该触发条件是在指 定时间段内发生了指定次数的写操作。
默认情况下持久化条件为 save 3600 1 300 100 60 10000。
其等价于以下三条:
save 3600 1 # 在 3600 秒(1 小时)内发生 1 次写操作
save 300 100 # 在 300 秒(5 分钟)内发生 100 次写操作
save 60 10000 # 在 60 秒(1 分钟)内发生 1 万次写操作
如果不启用 RDB 持久化,只需设置 save 的参数为空串即可:save “ ”
dbfilename
语法格式:
dbfilename 文件名
指定 RDB 文件的默认名称,默认为 dump.rdb。
AOF 持久化
AOF,Append Only File,是指 Redis 将每一次的写操作都以日志的形式记录到一个 AOF 文件中的持久化技术。当需要恢复内存数据时,将这些写操作重新执行一次,便会恢复到之前的内存数据状态。
持久化的执行
1. 开启–appendonly
默认情况下 AOF 持久化是没有开启的,通过修改配置文件中的 appendonly 属性为 yes 可以开启。
2. 默认文件名–appendfilename
Redis 7 在这里发生了重大变化。原来只有一个 appendonly.aof 文件,现在具有了三类多个 文件:
基本文件:可以是 RDF 格式也可以是 AOF 格式。其存放的内容是由 RDB 转为 AOF 当 时内存的快照数据。该文件可以有多个。
增量文件:以操作日志形式记录转为 AOF 后的写入操作。该文件可以有多个。
清单文件:用于维护 AOF 文件的创建顺序,保障激活时的应用顺序。该文件只有一个。
3. AOF 文件目录–appenddirname
为了方便管理,可以专门为 AOF 持久化文件指定存放目录。目录名由 appenddirname 属性指定,存放在 redis.conf 配置文件的 dir 属性指定的目录,默认为 Redis 安装目录。
4. 开启混合持久化
对于基本文件可以是 RDF 格式也可以是 AOF 格式。通过 aof-use-rdb-preamble 属性可以 选择。其默认值为 yes,即默认 AOF 持久化的基本文件为 rdb 格式文件,也就是默认采用混合式持久化。
AOF文件–appendonly.aof.1.incr.aof
两种方式的比较
RDB 优势 | RDB 不足 | AOF 优势 | AOF 不足 |
---|---|---|---|
RDB 文件较小 | 数据安全性较差 | 数据安全性高 | AOF 文件较大 |
数据恢复较快 | 写时复制会降低性能 | AOF 文件可读性强 | 写操作会影响性能 |
RDB 文件可读性较差 | 数据恢复较慢 |
使用场景
官方推荐使用 RDB 与 AOF 混合式持久化。
若对数据安全性要求不高,则推荐使用纯 RDB 持久化方式。
不推荐使用纯 AOF 持久化方式。
若 Redis 仅用于缓存,则无需使用任何持久化技术。