redis RDB持久化

2020-01-14  本文已影响0人  steamed_bun

RDB:redis数据从内存到硬盘的快照,用于数据持久化

一、save命令持久化(同步)

  1. 执行方法
    • redis客户端发一条save命令
    • 生成一个新的临时RDB文件
    • save执行完后,将老的RDB文件替换为新的RDB文件
  2. 复杂度:O(n)
  3. 缺点: save是一个同步的命令,如果数据量过大的话,会造成阻塞。
  4. 优点:没有消耗额外内存

二、bgsave命令持久化(异步)

  1. 执行方法
    • redis客户端发一条bgsave命令
    • 使用linux的fork()生成一个redis的子进程,去完成RDB文件的生成
    • 当子进程生成结束后,会通知主进程Background saving terminated with success
  2. 复杂度:O(n)
  3. 缺点:fork()会消耗内存
  4. 优点:“不会阻塞”redis客户端命令(fork()会阻塞,但速度足够快,合理使用影响不大)

三、配置文件自动持久化

  1. 自动生成RDB文件的配置参数( 默认)
    • 格式:save <seconds> <changes>
    save 900 1 # 在900秒(15分钟)内,如果至少更改了1个key
    save 300 10 # 300秒(5分钟)内,如果至少更改了10个key
    save 60 10000 # 60秒内,如果至少更改了10000个key
    
    • 可以配置多条,满足任意一条就会生效,就会执行bgsave命令
    • 可以直接使用#注释掉save配置,禁用save
    • 也可以配置save ''取消save配置
    • 建议:禁用save配置
  2. 指定生成的RDB文件的名称( 默认)
    • dbfilename dump.rdb
    • 文件名为dump.rdb
    • 建议: dbfilename dump-${port}.rdb 加入端口号区分,防止不同的redis直接互相覆盖
  3. 指定生成的RDB文件目录位置( 默认)
    • dir ./
    • 如此配置指当前目录,即redis.config的目录
  4. RDB文件的配置( 默认)
    stop-writes-on-bgsave-error yes #当bgsave发生了写入错误是否停止写入
    rdbcompression yes # RDB文件是否压缩
    rdbchecksum yes # 是否对RDB文件数据进行校验
    

四、其他会触发生成RDB文件的方式

  1. 全量复制 如主从复制
  2. debug reload
  3. shutdown

五、RDB缺点

  1. 耗时、耗性能
    • 数据 O(N)
    • fork()会消耗内存
    • I/O性能消耗大
  2. 不可控、丢失数据
    • 在保存执行的过程中,如果发生宕机,那么数据就丢失了
上一篇下一篇

猜你喜欢

热点阅读