Redis学习3.0(持久化RDB&AOF)

持久化操作
  1. redis是基于内存的数据库,数据存储在内存上,服务器重启或者出现什么意外情况会导致数据丢失。

  2. 这里可以持久化数据放入硬盘的文件中。永远存储数据,在需要时将保存的数据进行恢复。

  3. 端口连接号:6379

  4. 持久化机制:

    RDB方式(快照方式):将当前数据状态以快照的形式记录下来进行保存,储存格式简单,关注点在数据上。

    AOF方式(日志方式):将操作数据的过程以日志的方式记录下来,存储格式复杂,关注在操作数据的过程。

RDB持久方式:

默认方式

在一定的时间间隔中。检测key的变化,然后持久化数据

配置核心配置文件,900秒内有一个数据改变就自动化保存数据。

在这里插入图片描述

  • 使用save指令进行存储,默认的存储文件是dump.rdb

  • 当Redis服务启动时候就会自动读取此文件,将存储的数据进行恢复;

  • save指令直接将数据直接存储到磁盘上,若是数据过大且其他服务器也访问将会出现阻塞问题,影响性能(不建议使用),Redis提供了bgsave进行解决问题。

    • /**
      **使用系统多进程 COW(Copy On Write) 机制 | fork 函数**
      
      Redis在持久化时会调用glibc的fork函数产生一个子进程,简单理解也就是基于当前进程复制了一个进程,主进程和子进程会共享内存里面的代码块和数据段:
      
      Redis是一个单线程的程序
      1.save会直接调用rdbSave,会阻塞当前主进程,知道保存完成为止。在此阻塞期间服务器不能进行处理其他任何客户端的请求。
      2.bgsave回调用一个folk函数生成一个子线程,子线程进行调用rdbSave,并且执行完成后返回信号,此期间主线程可以继续处理其他请求。
      
      
      
      操作系统的COW机制来进行数据段页面的分离。数据段是由很多操作系统的页面组合而成,当父进程对其中一个页面的数据进行修改时,会将被共享的页面复制一份分离出来,然后对这个复制的页面进行修改。这时子进程相应的页面是没有变化的,还是进程产生时那一瞬间的数据。
      
      子进程因为数据没有变化,它能看到的内存里的数据在进程产生的一瞬间就凝固了,再也不会改变,这也是为什么 Redis的持久化叫「快照」的原因。接下来子进程就可以非常安心的遍历数据了进行序列化写磁盘了。
      
      参考自:敖丙:https://mp.weixin.qq.com/s/O_qDco6-Dasu3RomWIK_Ig
      **/
      
  • save的相关:

    • save指令配置根据使用场景进行设置,频率过高过低都导致性能下降
    • 调用debug reload执行重启服务器进行自动保存数据;
    • 服务器关闭时shutdown会自动保存数据。
RDB持久化的优点:
  • RDB是一个紧凑压缩的二进制文件存储数据效率高;
  • 此方法是某个时间点进行数据快照,适合数据备份,数据整体复制的场景;
  • RDB恢复数据比AOF快。
RDB持久化的缺点:
  • RDB是一个快照方式,一次数据量大,IO慢性能低下;
  • 无法进行实时备份数据,数据丢失的情况大;
  • bgSave指令每次执行都会创建一个子线程,内存开销。
AOF持久方式:

日志方式记录数据,记录每一条数据的操作

在这里插入图片描述

介绍:
  • AOF实现持久化是以独立日志的方式记录每次写命令,重启时重新执行AOF文件恢复数据;
  • 储存的是对数据的操作,实时性较高,目前AOF持久化是主流方式。
  • AOF持久化方式写数据的过程是:
    • Redis将命令写入AOF写命令缓冲区中,到达一定程度后进行将缓冲区的数据一次性写入AOF文件中。
    • 每次操作写入AOF文件,数据实时性高,零误差但是因为Redis每秒写能达到十万以上,每次要进行IO此方式不推荐使用;
    • fsync是一个很消耗资源的一个过程,默认使用每秒写入;
    • no:由操作系统控制每次同步到AOF文件的周期。

因为Redis默认是RDB方式,此方式需要配置文件设置:appendonly no|yes,开启之后会创建一个.aof文件,用于备份文件。

AOF重写:

不断的往.aof文件写入,数据过大存在废弃的过程;引入了AOF重写机制,对AOF进行压缩,得到最优的文件。

原理 就是 开辟一个子进程 对内存进行 遍历 转换成一系列 Redis 的操作指令,序列化到一个新的 AOF 日志文件 中。序列化完毕后再将操作期间发生的 增量 AOF 日志 追加到这个新的 AOF 日志文件中,追加完毕后就立即替代旧的 AOF 日志文件了,瘦身工作就完成了。

在这里插入图片描述

AOF重写作用:

  1. 降低磁盘占用量,提高磁盘使用率;
  2. 提高持久化效率,降低持久化写时间,提高IO性能;
  3. 提高数据恢复效率。

AOF重写规则:

  1. 超时数据不再写入文件;
  2. 忽略无效指令,只保存最终数据写入文件;
  3. 对于同一数据的多条写命令合并。

重写方式:

  1. 手动:bgrewriteaof指令
  2. 自动配置:
    1. AOF自动触发百分比 auto-aof-rewrite-percentage 100
    2. AOF自动触发最小尺寸 auto-aof-rewrite-min-size 64mb
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值