Redis持久化:RDB、AOF

前言

       Redis是一种基于内存,通过key-value结构来实现的高性能nosql关系型数据库。它与memcached类似,不过Redis支持数据的持久化,而且支持的数据类型非常的丰富,如:string(字符串),list(列表),set(集合),sorted set(有序集合),hash(哈希)。除了支持丰富的数据类型之外,还能够在服务器端计算集合之间的交集,并集,补集等,还支持各种排序功能。所以说Redis也可以看做是一种数据结构服务器。

        Redis的所有数据都是保存在内存中,然后不定期的通过异步方式保存到磁盘上(这称为“半持久化模式”);也可以把每一次数据变化都写入到一个append only file(aof)里面(这称为“全持久化模式”)。 

        由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件)。那么这两种持久化方式有什么区别呢,该如何选择呢?

Redis提供了两种方式的持久化机制:

        ①RDB持久化机制(Redis Database):是一种基于内存快照的持久化方式。将Redis在内存中的数据,在指定的时间间隔内将内存中的数据集快照写入磁盘

        ②AOF持久化机制(Append Only File):是redis使用日志的方式来持久化数据的一种方式。将操作日志aof文件通过追加的方式写入文件

RDB和AOF的区别

        RDB持久化,是指在符合一定的条件下,将内存中的 数据集 以 快照 的方式写入磁盘,实际操作过程是fork一个子进程,先将数据写入临时文件,写入成功后,再替换之前的文件,用二进制压缩储存。

        Redis会在以下几种情况下对数据进行快照:①根据redis.conf中配置规则进行自动快照(配置规则见文末)  ②用户执行save或者bgsave命令    ③执行flushall命令(清库操作)   ④执行主从复制操作时


        AOF持久化,是以日志的形式记录服务器所处理的每一个写、删除操作,查询操作不会记录,以文本的形式记录,可以打开文件查看到详细的操作记录。

RDB和AOF的优缺点

RDB的优点:

       ①一旦采用该方式,那么你的整个Reids数据库将只包含一个文件,这对于文件备份而言是非常完美的。比如,你可能打算每个小时归档一次最近24小时的数据,同时还要每天归档一次最近30天的数据。通过这样的备份策略,一旦系统出现灾难性故障,我们可以非常容易的进行恢复。【适合大规模的数据恢复】

      ②相对于AOF存储的是日志,RDB更节省磁盘空间【节省磁盘空间】

      ③性能最大化。对于Redis的服务进程而言,在开始持久化时,它唯一需要做的只是fork出子进程,之后再由子进程完成这些持久化的工作,这样就可以极大的避免服务进程执行IO操作了。

      ④相比于AOF机制,如果数据集很大,RDB机制的启动效率会更高。【恢复速度快】

RDB的缺点:

      ①会导致数据丢失。如果你想保证数据的高可用性,即最大限度的避免数据丢失。RDB机制不是一个很好的选择。因为系统一旦在定时持久化之前出现宕机现象,此前没有来得及写入磁盘的数据都将消失。

      ②由于RDB机制采用fork子进程来完成数据的持久化工作,所以,当数据集足够大时,可能会导致服务器停止几百毫秒,乃至于一秒钟都是有可能的。

参考:Redis持久化之大数据服务暂停问题_扛麻袋的少年的博客-CSDN博客

AOF的优点:

     ①该机制可以带来更高的安全性,即数据持久性。AOF提供了3种同步策略。即1、每秒同步  2、每次修改同步 3、不同步。

        1.每秒同步:其本质也是异步操作。只是每秒钟强制写入磁盘一次,看着是效率也比较慢,但是官方已经在性能和持久化方向中做了很好的折中,推荐使用!!!

        2.每次修改同步:我们可以视为它是同步持久化,即每次发生数据变化都会立即flush到磁盘,这种是效率最慢的,但是能够保证完整的持久化,不推荐使用!!!

        3.不同步:性能最好,完全依赖OS,就是没有持久化操作,不推荐使用!!!

      ②由于AOF机制对日志文件的写入操作采用的是append模式,因此在写入过程中,即使出现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果我们本次操作只是写入了一半数据就出现了系统崩溃问题,不用担心,在Redis下一次启动之前,我们可以通过 redis-check-aof 工具 来帮助我们解决数据一致性的问题

      ③如果日志文件过大,Redis可以自动启用 rewrite 机制。即 Redis 以 append 模式不断的将修改数据写入到老的磁盘文件中。同时Redis会创建一个新的文件用于记录此期间有哪些修改命令被执行。因此在进行 rewrite 切换时可以更好的保证数据的安全性。

      ④AOF机制包含一个格式清晰、易于理解的日志文件,用于记录所有的修改操作。事实上,我们也可以通过该文件完成数据的恢复。

AOF的缺点:

      ①对于相同数量的数据集而言,AOF文件通常要大于RDB文件。RDB在恢复大数据集的速度比AOF的恢复速度要快。

      ②根据同步策略的不同,AOF机制在运行效率上往往会慢于RDB机制。每秒同步策略的效率是比较高的,同步禁用策略的效率和RDB一样高效。

RDB和AOF如何选择?

       就是看系统是愿意牺牲一些性能,换取更高的缓存一致性(AOF),还是愿意写操作频繁的时候,不启用备份来换取更高的性能,待手动运行save(线上慎重使用save)或者bgsave的时候,再做备份(RDB)。我们可以通过命令:config get save

Redis默认使用的是 RDB。持久化规则为:

3600 1      #在3600秒(60分钟)之后,如果至少有1个key发生变化,则dump内存快照。
300 100     #在300秒(5分钟)之后,如果至少有100个key发生变化,则dump内存快照。
60 10000    #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。

       我们可以通过命令:config get save 来查看默认的持久化方案。也可以通过 config get * 来查看所有的配置类相关信息。

如果要关闭RDB,

       ①执行 config set save "" 即可。

       ②或者进入配置文件将:

           Save 900 1      

           Save 300 10    

           Save 60 10000   

           注释掉,并打开save "" 的注释,使得  save ""  生效,即可关闭RDB

RDB和AOF在配置文件中如何配置

RDB持久化配置

       Redis会将数据集的快照dump到dump.rdb文件中。此外,我们也可以通过配置文件来修改Redis服务器dump快照的频率,在打开redis.conf文件之后,我们搜索save,可以看到下面的配置信息:(三个配置之间是"或"的关系)

save 900 1           #在900秒(15分钟)之后,如果至少有1个key发生变化,则dump内存快照。
save 300 10          #在300秒(5分钟)之后,如果至少有10个key发生变化,则dump内存快照。
save 60 10000        #在60秒(1分钟)之后,如果至少有10000个key发生变化,则dump内存快照。

AOF持久化配置(默认是关闭状态,修改redis.conf文件中appendonly为yes即可打开。如果rdb和aof同时打开,会优先使用AOF)

appendfsync always     #每次有数据修改发生时都会写入AOF文件。
appendfsync everysec   #每秒钟同步一次,该策略为AOF的默认策略。
appendfsync no         #从不同步。高效但是数据不会被持久化。

Redis 禁用持久化

       Redis是默认开启RDB的,AOF则是默认关闭的,相当于初始安装的Redis是持久化的。

       如何关闭 Redis 持久化?我的需求是只把redis当作缓存来用,所以持久化到硬盘对我的需求来说没有意义。

修改redis配置文件,redis.conf 第115行左右。

#1.注释掉原来的持久化规则
save 900 1
save 300 10
save 60 10000   # 将这三行注释掉

#2.设置为空
save ""

#3.删除已持久化生成的dump.rdb文件(没有请忽略,如果使用中途要禁用持久化rdb,则需要删除dump.rdb文件)

#4.重启redis服务即可。

AOF和RDB同时开启,Redis听谁的 

        AOF和RDB同时开启,系统默认取AOF的数据(数据不会存在丢失) 


博主写作不易,来个关注呗

求关注、求点赞,加个关注不迷路 ヾ(◍°∇°◍)ノ゙

博主不能保证写的所有知识点都正确,但是能保证纯手敲,错误也请指出,望轻喷 Thanks♪(・ω・)ノ

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值