Redis持久化两种方式的粗浅理解

Redis是一个内存数据库,效率比传统数据库效率要高得多,但是对极端情况(宕机断电)的防御性能就差了很多。Redis提供了两种持久化技术,一种是**RDB Snapshotting**,另一种是**AOF(append-only-file)**。

RDB

rdb快照技术就是将内存中的数据集保存下来。

  • 三种保存方式:
  1. 自动触发
    每过指定时间,根据规则进行自动保存。见配置文件在这里插入图片描述
  2. save
    在这里插入图片描述
    该命令会阻塞当前Redis服务器,在save执行期间,Redis不能处理其他命令,直到快照完成为止。
  3. bgsave
    在这里插入图片描述
    在执行bgsave(background save)时,Redis会fork出一个子进程,由子进程来进行RDB,主进程可以仅需负责其他命令,子进程会在RDB完成的时候结束。
  • 数据恢复
    只需要将rdb文件放在redis安装目录中,启动Redis服务的时候就会自动载入rdb文件。
    CONFIG GET dir命令可以查看安装目录。
    在这里插入图片描述
  • 优缺点
    优点:
  1. 在启用了压缩模式后,rdb文件十分节省内存。
  2. rdb恢复数据的速度更快.
    缺点:
  3. 可用性较差,可能会丢失部分数据,如自动保存间隔期间如果发生宕机,将失去期间数据。
  4. fork操作会占用一定的内存空间.
  • 原理
struct redisService{
     //1、记录保存save条件的数组
     struct saveparam *saveparams;
     //2、修改计数器
     long long dirty;
     //3、上一次执行保存的时间
     time_t lastsave;
 
}

struct saveparam{
     //秒数
     time_t seconds;
     //修改数
     int changes;
};

在这里插入图片描述
redisService中:
dirty记录距离上次成功持久化之后,Redis服务器进行的修改次数。
lastsave记录上次持久化的时间。

Redis 服务器还有一个周期性操作函数 severCron ,默认每隔 100 毫秒就会执行一次,该函数会遍历并检查 saveparams 数组中的所有保存条件,只要有一个条件被满足,那么就会执行 bgsave 命令。

执行完成之后,dirty 计数器更新为 0 ,lastsave 也更新为执行命令的完成时间。


AOF

AOF是将对键值对操作命令保存到文件中。
在这里插入图片描述

  • 保存方式
    开启AOF模式,其他配置请看配置文件。
    在这里插入图片描述
    默认是每秒执行一次aof,因此aof模式会厂商很难过大量IO操作。aof文件也会因为Redis不断写入越来越大。

  • bgrewriteaof命令
    主进程会fork出子进程,将内存中的数据重写成操作方式保存到aof文件中。这样可以一定程度压缩aof文件。
    在这里插入图片描述

  • 三种触发方式

  1. always 每次发生数据变更都进行同步
  2. everysec 每秒进行同步
  3. no 从不同步
  • 优缺点

优点:

  1. 可靠性,最多丢失1秒数据
  2. aof文件更容易修复
  3. aof可读性好

缺点:

  1. aof文件体积大
  2. 在高负载情况下aof性能较差
  3. 官方指出aof存在一些bug

RDB&AOF

redis4.0相对与3.X版本其中一个比较大的变化是4.0添加了新的混合持久化方式。前面已经详细介绍了AOF持久化以及RDB持久化,这里介绍的混合持久化就是同时结合RDB持久化以及AOF持久化混合写入AOF文件。这样做的好处是可以结合
rdb 和 aof 的优点, 快速加载同时避免丢失过多的数据,缺点是 aof 里面的 rdb 部分就是压缩格式不再是 aof
格式,可读性差。

作者:coding乐猿 链接:https://www.jianshu.com/p/446b12e4740f 来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在这里插入图片描述

混合持久化的优缺点:
优点: 结合了RDB和AOF的有点,加载速度较快,同时数据可靠性更高.

缺点: 兼容性变差了,而且aof文件可读性变差了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值