redis-持久化

2876 단어

一、RDB快照持久化


  • 在指定时间间隔将内存数据写入磁盘,默认持久化方式
  • 触发方式

  • 1. 执行save和bgsave命令
    2. 配置文件设置save <seconds> <changes>规则,自动间隔性执行bgsave命令
    3. 主从复制时,从库全量复制同步主库数据,主库会执行bgsave
    4. 执行flushall命令清空服务器数据
    5. 执行shutdown命令关闭Redis时,会执行save命令
    


  • 저장하기
    save会阻塞redis进程,再快照创建完之前不能出来其他请求
  • bgsave저장소
  • bgsave불확실한 redis에 대한 정보, 포크에 대한 모든 정보를 출력할 수 있는 전체 용량의 rdb 문서 작성,
  • 配置文件自动触发bgsave

  • # 900秒内有1次key改变则触发
    save 900 1
    # 300秒内有10次key改变则触发
    save 300 10
    # 60秒内有10000次key改变则触发
    save 60 10000
    



  • 优点:
  • RDB 사진 是一个压缩过的非常紧凑的文件,保存着某个时间点的数据集,适合做数据的备份,灾难恢复
  • 可以最大化Redis的性能,在保存RDB文件,服务器进程只需fork一个子进程来完成RDB文件的创建,父进程不需要做IO操作
  • 与AOF相比,恢复大数据集的时候会更快

  • 缺点:
  • rdb 的 数据 安全性 安全性 是 是 不如 不如 aof 的 的 的 的 的 整个 整个 数据集 数据集 的 过程 是 比 比 的 的 的 的 的 的 的 的 根据 根据 配置 配置 可能 可能 要 几 分钟 才 快照 快照 次 次 次 服务器 宕机 宕机 宕机 那么 就 可能 丢失 丢失 几 分钟 分钟 数据 数据
  • Redis 数据集较大时,fork 子进程要完成快照会比较耗CPU、耗时

  • 二、AOF持久化




    # appendonly参数开启AOF持久化
    appendonly no
    
    # AOF持久化的文件名,默认是appendonly.aof
    appendfilename "appendonly.aof"
    
    # AOF文件的保存位置和RDB文件的位置相同,都是通过dir参数设置的
    dir ./
    
    # 同步策略(always/everysec/no)
    appendfsync everysec
    
    # aof重写期间是否同步
    no-appendfsync-on-rewrite no
    
    # 重写触发配置
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    
    # 加载aof出错如何处理
    aof-load-truncated yes
    
    # 文件重写策略
    aof-rewrite-incremental-fsync yes
    
    # 同时开启rdb、aof
    aof-use-rdb-preamble yes
    



  • 부록
  • 开启aof,每个执行一个命令,都会把该命令以协议格式先追加到aof_buf缓存区的末尾,而不是直接写入文件,避免每次有命令都直接写入硬盘,减少硬盘IO次数
  • aof_buf写入aof策略:

  • appendfsync always:
    将aof_buf缓冲区的所有内容写入并同步到AOF文件,每个写命令同步写入磁盘
    
    appendfsync everysec:
    将aof_buf缓存区的内容写入AOF文件,每秒同步一次,该操作由一个线程专门负责
    
    appendfsync no:
    将aof_buf缓存区的内容写入AOF文件,什么时候同步由操作系统来决定
    



  • rewrite命令
  • 随着时间推移,aof文件会越来越大,rewrite就是为了缩小aof文件的大小
  • rewrite不是读取aof文件,而是读redis생성 새로운 aof文件替换老的aof文件
  • redis-7会把数据保存到aof目录下的rdb中,同时清空aof文件
  • 命令触发

  • # fork出一个进程来执行,服务器继续执行命令,且最加到aof_buf、
    # aof_rewrite_buf
    127.0.0.1:6379> bgrewriteaof
    



  • 自动触发
    配置文件:

  • # 当AOF文件的体积大于64MB,且AOF文件的体积比上一次重写后的体积大了一倍(100%)时,会执行`bgrewriteaof`命令
    auto-aof-rewrite-percentage 100
    auto-aof-rewrite-min-size 64mb
    



  • 优点:
  • 数据更完整,安全性更高,秒级数据丢失(取决fsync策略,如果是everysec,最多丢失1秒的数据)
  • AOF文件是一个只进行追加的日志文件,且写入操作是以Redis协议的格式保存的,内容是可读的,适合误删紧急恢6复5 (4)

  • 缺点:
  • 对于相同的数据集,AOF文件的体积要大于RDB文件,数据恢复也会比较慢
  • 根据所用的 fsync 策略,AOF 的速度可能会慢于 RDB. 不过在一般情况下,每秒 fsync 的性能依然非常高
  • 좋은 웹페이지 즐겨찾기