Redis持久化

Redis的持久化

  • Redis的数据都是存储在内存之中的,为了数据的永久保存,需要吧数据同步到硬盘上,这个过程就叫做持久化,Redis的持久化存在有两种方式;rgb方式,aof方式,这两种方式可以单独使用,也可以综合使用。

  • rdb持久化方式:这种方式是redis默认开启的,是在指定的时间内触发指定的操作次数,便会将数据写入硬盘。

  • aof持久化方式:是以日志的形式,记录每一次的写操作,服务器启动后,根据日志来构建数据。

  • 两种方式的优缺点,rdb性能高,但是由于机制问题,如果短时间内进行大量操作,引得redis崩溃,那么将会损失最后这段时间的所有数据,对数据的完整性没有保障;aof性能低,因为它是对于每一个写的操作都进行io流的读写操作,写在硬盘上,所以效率比较低,但以为精确到了每一次操作,所以对于数据的完整性有保障。各有所长,各有所短。

Redis持久化之rdb

  • RDB:在指定的时间间隔之内将内存中的数据集快照写入到磁盘,也就是行话所说的snapshot快照,他在恢复时试讲快照文件直接读取到内存中。

  • Redis是单线程,所以想要达到用户的主命令,与持久化同时运行,需在主进程之外,开一个fork子进程来确保两个操作同时进行,子进程会将数据写入到一个临时文件中,等持久化过程都结束之后,在将这个临时文件替换上次持久化好的文件,这样确保数据的安全性,不至于redis服务器宕机造成文件编写一半,就上次持久化的文件也给毁了。整个过程中,主进程不进行任何的io操作的,这样就确保了rdb方式的高性能,如果需要进行大规模的快照,且处于数据恢复的完成性不是很铭感,那么rdb方式将比aof更加适合高效。

  • rdb方式的优势:只有一个文件,时间间隔的数据,可以归档为一个文件,方便压缩和转移;

  • rdb方式的劣势:如果高并发造成宕机,那么这次高并发的数据将会丢失,因为是每隔一段时间进行持久化的操作。

  • rdb的配置

  • 在redis目录下的redis.conf文件,因为rdb是默认开启的

    请添加图片描述

​ 图上是rdb的持久化策略

​ (1)save 900 1 表示每900秒至少有一个key发生变化,就持久化;

​ (2)save 300 10 同理没300秒至少有10个key发生变化,就持久化;

​ (3)save 60 10000 每60秒有10000以上的key发生变化, 就持久化;

请添加图片描述

​ 图上是rdb持久化产生的文件名

请添加图片描述

​ 图上是rdb文件的存储路径

  • 备份数据:我们只需要把dump.rdb文件复制拷贝到另一个位置
  • 还原数据:只需吧dump.rdb文件拷贝到你在配置文件中dir的路径上,重启redis就可以了。

Redis持久化之AOF

  • aof:以日志的形式来记录每个写操作,将redis执行过的所有写指令全部记录下来(不会记录读指令)只需追加文件,但是不可以改写文件,redis启动之初会读取该文件重新构建数据,即,redis重启的话就是根据日志文件的内容将写指令从头到尾的执行一遍,以完成数据恢复功能。

  • aof优势:安全性相对于rdb要高很多,记录了每一个操作也更能够追根溯源

  • 劣势:因为进行了大量的io操作,效率比较低

  • Redis是默认关闭aof方式的

  • 查看redis.conf配置文件

    请添加图片描述

​ appendonly no表示aof方式默认为关闭,yes则为开启

​ appendfilename ‘“文件名” 就是aof存储的日志文件了

请添加图片描述

​ 上图的配置是aof的三种同步策略:

​ always通过持久化,每次发生数据变更都会立即被记到磁盘 性能交叉但数据完成性比较好

​ everysec 异步操作,每秒操作,如果疫苗宕机,则会有数据丢失

​ no表示不同步

  • 备份:跟rdb操作方式相同,将aof文件拷贝到其他存储设备之中

  • 还原:同理将aof文件拷贝到 配置文件的设置目录下

  • 如果在写入aof文件是服务器挂掉了,则aof文件中的内容肯定会存在错误指令,因为可能指令才写了一半就被强制停止了,这个时候需要将aof文件进行修复,在/usr/lical/bin目录下有个redis-check-aof可以用它来修复;

    reids-check-aof --dix aof文件名

  • aof的重写机制原理:采用文件追加的方式,文件夹越来越大,我们需要避免这种情况,新增加了重写进制,当aof文件的大小超过设定的值,redis就是启动aof文件的内容压缩,只保留可以恢复数据的最小指令集。

  • aof文件持续的时间与文件的大小成正相关,在aof文件过大时,会fork出一条新的进程俩将文件重写(同rdb一样,先在临时文件中进入重写,待全部内容完成之后,在将临时文件的名字改成aof文件的名字进行覆盖),遍历新进程的内存中数据,并没有读取旧的文件,而是将整个内存中的数据内容用命令的方式重写进了一个新的aof文件,避免了重复操作,这样和快照有点类似。

  • 触发条件

    在APPEND ONLY MODE模块下有两条默认的配置:

    请添加图片描述

​ 这两条配置必须同事满足,才会触发aof的重写,第一条表示文件大小达到前一次保存文件的一倍,第二条表示aof文件的大小最小达到64mb。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值