Redis持久化RDB与AOF -----来如此容易

持久化

利用永久性的储存介质进行保存,在特定的时间将保存的数据进行恢复的工作机制

image-20201025114311810

RDB

  • 手动执行一次保存(在工作空间生成一个2进制的dump.rdb文件) save

    image-20201025114919131

  • 保存后,下一次启动redis直接会恢复对应数据

  • save 指令执行会阻塞当前的Redis服务器,直到RDB过程完成为止,有可能会造成长时间的阻塞,线上环境不建议使用

bgsave

image-20201026163842984

  • 后台储存过程中如果出现错误现象,是否停止保存操作(默认开启) stop-writes-on-bgsave-error yes

RDB启动方式

  • 在conf文件中配置 save second changes 满足时间范围内key的变化数量达到指定数量进行持久化,默认使用 bgsave

image-20201026165750753

rdb特殊启动形式

  • 服务器运行过程中重启 debug reload
  • 关闭服务器时指定保存数据 shutdown save

RDB的优点

  • RDB是一个紧凑的二进制文件,储存效率较高
  • RDB内部储存的是redis在某个时间点的数据快照,非常适合用于数据备份,全量复制等场景
  • RDB恢复数据的速度比AOF快很多
  • 应用:服务器中每X小时执行bgsave备份,并将RDB文件拷贝到远程机器中,用于灾难恢复

RDB缺点

  • RDB方式无论是执行指令还是利用配置,无法做到实时持久化,具有较大的可能性丢失数据
  • bgsave 指令每次运行都需要执行fork操作创建子进程,要牺牲掉一些性能
  • Redis 的众多版本中未进行RDB文件格式的版本统一,有可能出现各版本之间的数据格式无法兼容的现象
  • 储存数据量大,效率低(基于快照思想,每次读写全部数据,当数据量大时,效率低),io性能低

AOF

AOF持久化:以独立日志方式记录每次写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的,与RDB相比可以简单的描述为改记录数据为记录数据的产生过程

AOF 写数据三种策略

  • always 每次写入操作均同步到AOF文件中,数据0误差,性能低
  • everysec 每秒将缓冲区中的指令同步到AOF文件中,数据准确性较高,性能高,建议使用(默认),系统忽然宕机时丢失一秒数据
  • no 操作系统控制每次同步到AOF文件的周期,不可控、

AOF功能打开

  • 配置文件 添加以下配置

    appendonly yes (默认no)
    appendfsync always (everysec || no)
    appendfilename 保存的文件名
    

AOF重写

image-20201027110133881

  • 手动重写 bgrewriteaof
  • 自动重写配置
auto-aof-rewrite-min-size size // 按大小重写
auto-aof-rewrite-percentage percentage // 按比例重写

image-20201027111833291

image-20201027112511742

image-20201027112627984

RDB与AOF区别

image-20201027112835747

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7yISzJlo-1603876134211)(C:\Users\86188\AppData\Roaming\Typora\typora-user-images\image-20201027112853609.png)]

猜你喜欢

转载自blog.csdn.net/weixin_45877759/article/details/109337737
今日推荐