Redis 必知必会之持久化


1.Redis所有的数据保存在内存中,对数据的更新将异步的保存到磁盘上。

2.持久化的方式:快照(MySQL Dump和Redis RDB)、写日志(MySQL Binlog和Redis AOF)

3.Redis RDB触发方式

  • save(同步命令,替换老文件)
  • bgsave (异步命令,fork() 一个进程处理 一般情况会很快)
  • 自动
命令 save bgsave
IO类型 同步 异步
是否阻塞 是(发生在fork())
复杂度 O(n) O(n)
优点 不会消耗额外内存 不阻塞客户端命令
缺点 阻塞客户端命令 需要fork 消耗内存

4.自动生成RDB的配置,本质是每seconds会有changes个改变 就会执行bgsave。

相关配置:

  • stop-writes-on-bgsave-error bgsave时发生错误时是否停止写入
  • dir rdb目录
  • rdbcompression 是否压缩
  • rdbchecksum 交验和检验

最佳实践:

  • dbfilename dump-${port}.rdb
  • dir /bigdiskpath
  • stop-writes-on-bgsave-error yes
  • rdbcompression yes
  • rdbchecksum yes

5.rdb生成触发机制 全量复制、debug reload 、shutdown。

6.RDB耗时、耗性能。

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

7.RDB不可控、有可能丢失数据。

8.AOF 的三种策略

  • always 写命令刷新的缓冲区
  • everysec 默认
  • no 操作系统决定
命令 always everysec no
优点 不丢失数据 每秒一次fsync 不用管
缺点 IO开销较大 一般sata盘只有几百TPS 丢一秒数据 不可控

9.AOF重写作用 减少硬盘占用量、加速恢复速度。AOF重写实现的两种方式:bgrewriteaof、AOF重写配置。

10.AOF重写配置

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

11.AOF配置最佳实践

  • appendonly yes
  • appendfilename “appendonly-${port}.aof”
  • appendfsync everysec
  • dir /bigdiskpath
  • no-appendfsync-on-rewrite yes
  • auto-aof-rewrite-percentage 100
  • auto-aof-rewrite-min-size 64mb

12.RDB和AOF对比

命令 RDB AOF
启动优先级
体积
恢复速度
数据安全性 丢数据 根据策略决定
轻重
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!