美文网首页
redis RDB持久化

redis RDB持久化

作者: steamed_bun | 来源:发表于2020-01-14 16:28 被阅读0次

    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. 不可控、丢失数据
      • 在保存执行的过程中,如果发生宕机,那么数据就丢失了

    相关文章

      网友评论

          本文标题:redis RDB持久化

          本文链接:https://www.haomeiwen.com/subject/aykaactx.html