跳至主要內容

2.15 持久化机制 🎉

刘春龙...大约 5 分钟数据库redis

2.15 持久化机制 🎉

由于Redis的数据都存放在内存中,如果没有配置持久化,Redis重启后数据就全丢失了,于是需要开启Redis的持久化功能,将数据保存到磁盘上,当Redis重启后,可以从磁盘中恢复数据。

对于Redis而言,持久化机制是指把内存中的数据存为硬盘文件, 这样当Redis重启或服务器故障时能根据持久化后的硬盘文件恢复数 据。

redis持久化的意义,在于故障恢复。比如部署了一个redis,作为cache缓存,同时也可以保存一些比较重要的数据。

Redis提供了两个不同形式的持久化方式

  • RDB(Redis DataBase)
  • AOF(Append Only File)

RDB持久化机制 💎

RDB是在指定的时间间隔内将内存的数据集快照写入磁盘,也就是行话讲的快照,它恢复时是将快照文件直接读到内存里。

提示

这种格式是经过压缩的二进制文件

配置dump.rdb持久化文件 👻

RDB保存的文件,在redis.conf中配置文件名称,默认为dump.rdb。(大约在redis.conf文件的481行左右)

rdb文件的保存位置,也可以修改。默认在Redis启动时命令行所在的目录下。(大约在redis.conf文件的504行左右)

触发机制 👻

主要三种方式RDB配置 : RDB配置 、 flushall 、 save与bgsave

  • RDB配置

快照默认配置:

  • save 3600 1:表示3600秒内(一小时)如果至少有1个key的值变化,则保存。
  • save 300 100:表示300秒内(五分钟)如果至少有100个 key 的值变化,则保存。
  • save 60 10000:表示60秒内如果至少有 10000个key的值变化,则保存。

配置新的保存规则

给redis.conf添加新的快照策略,30秒内如果有5次key的变化,则触发快照。配置修改后,需要重启Redis服务。

save 3600 1
save 300 100
save 60 10000
save 30 5
  • flushall

执行flushall命令,也会触发rdb规则。

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

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

    • bgsave:
      执行该命令时,Redis会在后台异步进行快照操作,快照同时还可以响应客户端请求。

高级配置 👻

  • stop-writes-on-bgsave-error

默认值是yes。当Redis无法写入磁盘的话,直接关闭Redis的写操作。

  • rdbcompression

默认值是yes。对于存储到磁盘中的快照,可以设置是否进行压缩存储。如果是的话,redis会采用LZF算法进行压缩。如果你不想消耗CPU来进行压缩的话,可以设置为关闭此功能,但是存储在磁盘上的快照会比较大。

  • rdbchecksum

默认值是yes。在存储快照后,我们还可以让redis使用CRC64算法来进行数据校验,但是这样做会增加大约10%的性能消耗,如果希望获取到最大的性能提升,可以关闭此功能。

恢复数据 👻

只需要将rdb文件放在Redis的启动目录,Redis启动时会自动加载dump.rdb并恢复数据。

相关信息

  • 优势
    • 适合大规模的数据恢复
    • 对数据完整性和一致性要求不高更适合使用
    • 节省磁盘空间
    • 恢复速度快
  • 劣势
    • 在备份周期在一定间隔时间做一次备份,所以如果Redis意外down掉的话,就会丢失最后一次快照后的所有修改。

AOF持久化机制 💎

AOF是以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来。

AOF默认不开启,可以在redis.conf中配置文件名称,默认为appendonly.aof。(1400-1500行左右)

相关信息

AOF文件的保存路径,同RDB的路径一致,如果AOF和RDB同时启动,Redis默认读取AOF的数据。

  • 开启AOF

设置Yes:修改默认的appendonly no,改为yes,修改完需要重启redis服务。

  • AOF同步频率设置

提示

  • appendfsync always

始终同步,每次Redis的写入都会立刻记入日志,性能较差但数据完整性比较好。

  • appendfsync everysec

每秒同步,每秒记入日志一次,如果宕机,本秒的数据可能丢失。

  • appendfsync no

redis不主动进行同步,把同步时机交给操作系统。

相关信息

  • 优势

    • 备份机制更稳健,丢失数据概率更低。
    • 可读的日志文本,通过操作AOF稳健,可以处理误操作。
  • 劣势

    • 比起RDB占用更多的磁盘空间。
    • 恢复备份速度要慢。
    • 每次读写都同步的话,有一定的性能压力。

如何选用持久化方式 💎

  • 不要仅仅使用RDB
    RDB数据快照文件,都是每隔5分钟,或者更长时间生成一次,这个时候就得接受一旦redis进程宕机,那么会丢失最近5分钟的数据。

  • 也不要仅仅使用AOF

    • 你通过AOF做冷备,没有RDB做冷备,来的恢复速度更快。
    • RDB每次简单粗暴生成数据快照,更加健壮,可以避免AOF这种复杂的备份和恢复机制的bug。
  • 综合使用AOF和RDB两种持久化机制
    用AOF来保证数据不丢失,作为数据恢复的第一选择,用RDB来做不同程度的冷备,在AOF文件都丢失或损坏不可用的时候,还可以使用RDB来进行快速的数据恢复。

上次编辑于:
贡献者: 刘春龙
评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v2.15.7