Redis持久化的取舍和选择

版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/love905661433/article/details/82194123

持久化的作用

  • 什么是持久化

Redis的数据都保存在内存中,将对数据的更改异步保存到磁盘中,称之为持久化

  • 持久化方式
    • 快照
    • MySQL Dump
    • Redis RDB
    • 写日志
    • MySQL Binlog
    • Hbase HLog
    • Redis AOF

Redis的持久化方式

RDB

什么是RDB

将Redis中数据,以快照方式生成一个二进制的RDB文件存储到硬盘中,重启时可以从RDB文件中恢复数据

触发机制

save(同步)

  • 执行一条save命令,就会生成一个RDB文件
  • 阻塞
  • 如存在老的RDB文件,会替换

bgsave(异步)

  • 执行bgsave命令
  • fork()一个子进程在后台去创建RDB文件
  • 返回成功

具体执行流程如下图:

bgsave命令执行过程

save与bgsave对比:

save与bgsave对比

自动生成RDB

相关配置:

  • save 900 1 : 900秒内有一条记录更新就自动生成RDB文件
  • save 30010 : 300秒内有10条记录更新就自动生成RDB文件
  • save 60 10000 : 60秒内有10000条记录更新就自动生成RDB文件
  • dbfilename dump.rdb : 配置RDB文件名
  • dir ./ : 配置RDB文件存放路径
  • stop-writes-on-bgsave-error yes : 如果bgsave出现错误,是否停止写入,一般都配置为yes
  • rdbcompression yes : RDB文件是否采用压缩格式,默认yes
  • rdbchecksum yes : 是否对RDB文件进行校验

最佳配置:

  • 不使用自动生成RDB策略
  • dbfilename dump–${port}.rdb : RDB文件最好以端口号区分
  • dir /bigdiskpath : RDB文件存放路径配置一个专门的存放路径
  • stop-writes-on-bgsave-error yes : 如果出现错误,就停止写入
  • rdbcompression yes : 使用压缩方式

触发机制-不容忽略的方式

  • 全量复制
  • debug reload : 不需要清空内存的重启
  • shutdown

RDB缺点

  • 耗时,耗性能
    • O(n)数据 : 耗时
    • fork() : 消耗内存,copy-on-write策略
    • Disk I/O : IO性能
  • 不可控,丢失数据

RDB总结

  • RDB是Redis内存到硬盘的快照,用于持久化
  • save通常会阻塞Redis
  • bgsave不会阻塞Redis,但会fork新进程
  • save自动配置满足任意一个条件就会被执行
  • 有些不容忽视的触发机制

AOF

AOF简介

将执行命令记录到日志文件中,重启时从日志文件中根据执行命令进行数据恢复

AOF的三种策略

always

每条命令都写到AOF文件中

everysec

每秒钟将命令写到AOF文件中,可能会丢失一秒的数据,默认配置

no

操作系统自行决定命令写入AOF文件中时机

三种策略对比

AOF三种策略对比

AOF重写

  • 对于能够合成的命令会将多条命令重写成一条
  • 删除过期数据

AOF重写

AOF重写作用

  • 减少硬盘占用量
  • 加速数据恢复速度

AOF重写的实现方式

  • 执行bgrewriteaof命令

    bgrewriteaof命令执行过程

    此处AOF重写,是根据Redis中数据生成一个AOF命令,并不是真的将执行的命令一条条写入到AOF文件中

  • 通过配置触发AOF重写

    • auto-aof-rewrite-min-size : AOF文件重写需要的尺寸
    • auto-aof-rewrite-percentage : AOF文件增长率
    • aof_current_size : AOF当前尺寸(单位: 字节)
    • aof_base_size : AOF上次启动和重写的尺寸(单位: 字节)

AOF重写流程

AOF重写流程

AOF相关配置

  • appendonly yes : 打开AOF
  • appendfilename “appendonly-${port}.aof” : 配置AOF文件名
  • appendfsync everysec : 配置AOF策略,这里是每秒同步
  • dir /bigdiskpath : AOF文件保存路径
  • no-appendfsync-on-rewrite yes : AOF重写期间是否允许追加数据,yes不允许
  • auto-aof-rewrite-percentage 100 : AOF重写配置,增长率
  • auto-aof-rewrite-min-size 64mb : AOF重写需要的AOF文件的最小尺寸

RDB和AOF抉择

RDB与AOF对比

RDB与AOF对比

RDB最佳策略

  • “关”掉RDB
  • 集中管理
  • 主从,从开

AOF最佳策略

  • “开” : 缓存和存储
  • AOF重写集中管理
  • 使用everysec策略

最佳策略

  • 小分片
  • 缓存或者存储
  • 监控
  • 足够的内存

猜你喜欢

转载自blog.csdn.net/love905661433/article/details/82194123