Redis持久化的取舍和选择RDB二进制AOF日志

本文介绍了Redis持久化的定义和方式,重点阐述了RDB和AOF两种持久化方法。RDB是将内存数据快照到硬盘,有同步和异步触发方式;AOF则通过日志记录写命令。还分析了两者优缺点,并给出了RDB与AOF的抉择策略及最佳配置建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

持久化的定义

​ redis将所有数据保持在内存中,对数据的更新将异步地保存在磁盘中

持久化的方式

快照

  • MySQL Dump
  • Redis RDB

###写日志

  • MySQL Binlog
  • Hbase HLog
  • Redis AOF

RDB

一、什么是RDB

经过RDB之后,redis会将内存中的数据创建一份快照到硬盘中,称为RDB文件(二进制)

当redis重新启动时,会加载硬盘中的RDB文件,加载到内存中完成数据恢复

二、RDB的触发方式

1.save(同步)

  • 在save的同时,其他命令会阻塞等待

  • 如果存在老的RDB文件,会先创建一个临时文件,然后对老文件进行替换

  • 时间复杂度,O(n)

2.bgsave(异步)

  • 调用bgsave后,会调用linux的fork()函数,创建一个子进程
  • 如果存在老的RDB文件,会先创建一个临时文件,然后对老文件进行替换
  • 时间复杂度,O(n)
  • 子进程名称:redis-rdb-bgsave

3.save VS bgsave

savebgsave
IO类型同步异步
阻塞是(阻塞发生在fork)
复杂度O(n)O(n)
优点不会消耗额外内存不阻塞客户端命令
缺点阻塞客户端命令需要fork,消耗内存

三、通过配置自动进行RDB操作

  • 内部相当于bgsave

  • Redis默认的save配置,以下条件满足任意一条都会被异步保存到磁盘上

  • 900秒中有一条数据被更新等。。

    配置secondchanges
    save9001
    save30010
    save6010000

四、RDB相关配置

配置项默认值含义
dbfilenamedump.rdbRDB快照文件名
dir./RDB快照文件生成所在目录
stop-writes-on-bgsave-erroryesbgsave时发生错误是否停止写入
rdbcompressionyesRDB文件是否采用压缩
rdbchecksumyes是否对RDB进行校验

五、RDB最佳配置

  • 不配置自动RDB操作
  • dbfilename dump-${port}.rdb
  • dir /redisDataPath
  • stop-writes-on-bgsave-error yes
  • rdbcompression yes
  • rdbchecksum yes

六、不容忽视的触发机制

  • 主从复制时机的全量复制,master节点会执行bgsave
  • debug reload
  • shutdown
  • flushDB 、 flushAll

七、RDB的缺点

  • 耗时
  • 耗性能
  • 不可控,容易丢失数据

通过save存很大的数据时,很消耗时间。bgsave会fork()一个子进程,保存数据时,数据大的话会消耗比较大的内存。

AOF

一、什么是AOF

通过日志方式将redis中的写命令进行日志记录,保存在硬盘文件中

日志记录的实质是将写命令写在硬盘的缓冲区中,再根据相关策略把数据刷新到磁盘中

当redis服务器启动时候,执行硬盘中的日志文件以恢复redis中的数据

二、AOF的三种策略

1.always

  • 含义:执行每条写命令都会将写命令写到磁盘中

2.everysec

  • 含义:每秒将数据从缓冲区刷到磁盘中,可能会丢失一秒的数据

###3.no

  • 含义:写命令何时刷新的磁盘中,由操作系统来决定

4.三种策略的比较

命令优点缺点
always不丢失数据IO开销较大,一般的SATA盘只有几百的TPS
everysec每秒一次fsync,保护硬盘可能会丢失一秒的数据
no不用管不可控

三、AOF重写

1.重写的作用

  • 减少磁盘占用
  • 加速AOF恢复速度
    • 例如一万次incr key 可以重写为 set key 10000

2.AOF重写实现方式-bgrewriteaof

客户端发送出一条bgrewriteaof命令后,redis会fork一个子进程完成AOF重写操作逻辑

3.AOF重写实现方式-AOF重写配置

  • AOF配置项
配置默认值含义
auto-aof-rewrite-min-size64MBAOF文件重写需要的尺寸,AOF多大时开启重写
auto-aof-rewrite-percentage100AOF文件增长率
(当前AOF文件大小超过上一次重写的AOF
文件大小的百分之多少才会重写)
  • AOF统计项

    统计名含义
    aof_current_sizeAOF当前尺寸(单位:字节)
    aof_base_sizeAOF上次启动和重写的尺寸(单位:字节)
  • 触发时机

    • 当前AOF文件大小***超过***最小重写尺寸
    • ***当前AOF文件大小***超过***上次重写完的AOF尺寸***的百分之多少(auto-aof-rewrite-percentage

4.AOF重写原理

AOF重写不会读取老的AOF文件,而是根据当前服务器的状态生成一份新的AOF文件,将老的AOF文件进行替换

四、AOF相关配置

配置项最佳取值含义
appendonlyyes开启AOF
appendfilenameaof-${port}.aofAOF文件名
appendfsynceverysecAOF策略
dir/redisDataPathAOF文件所在目录
no-appendfsync-no-rewriteyes在执行重写时不进行AOF操作
auto-aof-rewrite-percentage100AOF重写配置(见上文)
auto-aof-rewrite-min-size64MBAOF重写配置(见上文)

RDB与AOF的抉择

1.RDB VS AOF

RDBAOF
启动优先级
体积
恢复速度
数据安全性容易丢数据根据策略决定
轻重

2.RDB的最佳策略

  • 关闭RDB自动执行配置
  • 手动管理时进行RDB操作
  • 在从节点打开自动执行配置,但是不宜频繁执行RDB

###3.AOF的最佳策略

  • 建议打开,但是如果只是纯作为缓存使用可以不开
  • AOF重写集中管理
  • everysec

4.最佳策略

  • 小分片
    • 例如设置maxmemory参数设置每个redis只存储4个G的空间,这样各种操作都不会太慢
  • 需要进行监控(硬盘、内存、负载、网络)
  • 机器需要有足够的内存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值