zoukankan      html  css  js  c++  java
  • redis持久化

    持久化的定义

    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配置

      配置secondchanges
      save 900 1
      save 300 10
      save 60 10000

    四、RDB相关配置

    配置项默认值含义
    dbfilename dump.rdb RDB快照文件名
    dir ./ RDB快照文件生成所在目录
    stop-writes-on-bgsave-error yes bgsave时发生错误是否停止写入
    rdbcompression yes RDB文件是否采用压缩
    rdbchecksum yes 是否对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的缺点

    • 耗时

    • 耗性能

    • 不可控,容易丢失数据

     

     

    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-size 64MB AOF文件重写需要的尺寸,AOF多大时开启重写
    auto-aof-rewrite-percentage 100 AOF文件增长率 (当前AOF文件大小超过上一次重写的AOF 文件大小的百分之多少才会重写)
    • AOF统计项

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

      • 当前AOF文件大小超过最小重写尺寸

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

    4.AOF重写原理

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

    四、AOF相关配置

    配置项最佳取值含义
    appendonly yes 开启AOF
    appendfilename aof-${port}.aof AOF文件名
    appendfsync everysec AOF策略
    dir /redisDataPath AOF文件所在目录
    no-appendfsync-no-rewrite yes 在执行重写时不进行AOF操作
    auto-aof-rewrite-percentage 100 AOF重写配置(见上文)
    auto-aof-rewrite-min-size 64MB AOF重写配置(见上文)

     

     

    RDB与AOF的抉择

    1.RDB VS AOF

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

    2.RDB的最佳策略

    • 关闭RDB自动执行配置

    • 手动管理时进行RDB操作

    • 在从节点打开自动执行配置,但是不宜频繁执行RDB

    ###3.AOF的最佳策略

    • 建议打开,但是如果只是纯作为缓存使用可以不开

    • AOF重写集中管理

    • everysec

    4.最佳策略

    • 小分片

    • 例如设置maxmemory参数设置每个redis只存储4个G的空间,这样各种操作都不会太慢

    • 需要进行监控(硬盘、内存、负载、网络)

    • 机器需要有足够的内存

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Navsion二次开发_学习笔记
    《软件开发者路线图:从学徒到高手》笔记
    Concurrency并发性
    Excel VBA 函数
    在excel worksheet中添加button 和对Excel workbook做权限控制相关的新知识
    outline (group) 在Excel worksheet 中
    自主学习进度(软件工程)
    四则运算实现2(JAVA)
    简单四则运算实现(JAVA)
    数学建模(Lingo)(非线性整数规划)
  • 原文地址:https://www.cnblogs.com/dwvfw855/p/10830694.html
Copyright © 2011-2022 走看看