Redis持久化

因为Redis的读写操作都是在内存中进行的,一旦服务重启数据就会丢失,为了不让数据丢失,将内存中的数据保存到磁盘中,在服务器重启时从磁盘中恢复数据,就是Redis的持久化。
Redis的持久化分三种方式:

  1. 快照方式(RDB):将某一时刻的内存快照以二进制方式写入RDB文件中
  2. 文件追加方式(AOF):记录数据库的操作命令,以文本形式追加到AOF文件中
  3. 混合方式:先以RDB方式将数据写入文件头,后续操作则以AOF的形式追加在文件中
  1. RDB方式:

RDB有手动触发和自动触发两种方式

  1. 手动触发:
    save命令:该命令会使Redis处于阻塞状态,此时无法响应其他客户端的命令直至持久化完成
    bgsave命令:该命令会创建一个子进程在后台进行RDB持久化,不会阻塞其他客户端的命名
  2. 自动触发:
    1.在配置文件中配置save m n,表示m秒内n个键发生变化则自动触发持久化,配置了多条save那么满足任意一条都会自动触发持久化
    在这里插入图片描述
    当配置了主从赋值时,如果从数据库执行全量复制会触发主数据库执行bgsave生成RDB文件,然后主数据库将该文件发送给从数据库

RDB的优点:

  1. 占用内存小
  2. 因其是一个紧凑的文件,便于快速传输到远程服务器进行Redis数据恢复,适合灾难恢复
  3. 启动加载速度快

RDB的缺点:
因为RDB是以时间间隔保存数据,因此可能造成某个时间段数据丢失

  1. AOF方式:

默认情况下AOF是关闭的,如需开启,在配置文件中将appendonly no改为yes
在这里插入图片描述
触发方式:

  1. 自动触发:
    当满足策略条件时就会自动触发AOF持久化,策略有三种,appendfsync always表示将每条操作都写入AOF文件;appendfsync everysec表示每秒写入一次;appendfsync no表示不设置策略,由操作系统决定写入磁盘;
    如果满足AOF重写触发条,也会自动触发持久化;由于AOF是追加Redis命令,随着时间越长,文件就会越来越大,这会造成Redis启动速度慢,占用过多存储空间,因此Redis提供了AOF重写功能,即读取当前Redis状态重新写入AOF文件;触发AOF重写需要满足两个条件:达到AOF 重写的最小文件容量(auto-aof-rewrite-min-size),达到AOF 文件重写的大小比例(auto-aof-rewrite-percentage)在这里插入图片描述
  2. 手动触发:
    执行bgrewriteaof命令

如果只开启了RDB,Redis启动时只加载RDB文件;如果开启了AOF,无论是否开启RDB,都只加载AOF文件,即使没有AOF文件也不会加载RDB文件
如果正在写入AOF文件时服务器出错,导致最后一条命令被截断,这就是异常的AOF,该情况需要在配置文件中设置aof-load-truncated为 yes,服务器重启加载AOF文件会忽略最后一条命令;
如果AOF的中间命令也被破坏,在客户端输入redis-check-aof命令,会显示出错的那行,可以尝试手动修复;也可以用redis-check-aof --fix命令自动修复,但有丢书从被破坏出到文件尾部全部数据的风险;

AOF优点
  1. 保存数据更加完整,只丢失一条命令或一秒的数据
  2. 不会出现文件损坏,即便以为退出导致文件中的命令被破坏也能通过修复工具修复
  3. 即便使用了flushall删除所有数据,也可以通过删除AOF文件中的最后一条flushall命令将数据恢复
AOF缺点
  1. AOF文件占用空间大
  2. 性能低于RDB
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值