Redis的RDB和AOF持久化方式

持久化概述

持久化可以理解为存储,就是将数据存储到一个不会丢失的地方,如果把数据放在内存中,电脑关闭或重启数据就会丢失,所以放在内存中的数据不是持久化的,而放在磁盘就算是一种持久化。

Redis的数据存储在内存中,内存是瞬时的,如果linux宕机或重启,又或者Redis崩溃或重启,所有的内存数据都会丢失,为解决这个问题,Redis提供两种机制对数据进行持久化存储,便于发生故障后能迅速恢复数据。

持久化方式

(一)RDB方式

Redis Database(RDB),就是在指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存。

RDB 保存了在某个时间点的数据集(全部数据)。存储在一个二进制文件中,只有一个文件。默认是dump.rdb。RDB技术非常适合做备份,可以保存最近一个小时,一天,一个月的全部数据。保存数据是在单独的进程中写文件,不影响Redis的正常使用。RDB恢复数据时比其他AOF速度快。

       实现方式

RDB方式的数据持久化,仅需在redis.conf文件中配置即可,默认配置是启用的。

在配置文件redis.conf中搜索 SNAPSHOTTING, 查找在注释开始和结束之间的关于RDB的配置说明。配SNAPSHOTTING置地方有三处。

  1. 配置执行RDB生成快照文件的时间策略,对 Redis 进行设置, 让它在“ N 秒内数据集至少有 M 个key改动”这一条件被满足时, 自动保存一次数据集。

  2. 配置格式:save  <seconds>  <changes>

  3.  

    默认参数为:

    save 900 1

    save 300 10

    save 60 10000

  4. dbfilename:设置RDB的文件名,默认文件名为dump.rdb

  5. dir:指定RDB文件的存储位置,默认是 ./ 当前目录,表示你的redis命令在哪一级目录下启动的,该文件就在哪里存放

  6. 添加两个key

  7. 登录客户端./redis-cli -a 123456就OK了

  8. 显示保存成功

  9. 去/usr/local/redis-3.2.9/src可以看到rdb文件已经存在了

  10. 当退出redis的时候也会去保存

  11. 如果不想使用RDB方式,注释掉就行了,或者删除这几行,配置上已经说明了

  12. 在次停止就不会去保存了

  13. 总结:

    1. 优点:

      1. 由于存储的是数据快照文件,恢复数据很方便,也比较快

    2. 缺点:

      1. 会丢失最后一次快照以后更改的数据。如果你的应用能容忍一定数据的丢失,那么使用rdb是不错的选择,如果你不能容忍一定数据的丢失,使用rdb就不是一个很好的选择。

      2. 由于需要经常操作磁盘,RDB 会分出一个子进程。如果你的redis数据库很大的话,子进程占用比较多的时间,并且可能会影响 Redis 暂停服务一段时间(millisecond 级别),如果你的数据库超级大并且你的服务器CPU比较弱,有可能是会达到一秒。

(二)AOF方式

Append-only File(AOF),Redis每次接收到一条改变数据的命令时(类似MySQL的主从复制binlog,只复制DML语句),它将把该命令写到一个AOF文件中(只记录写操作,读操作不记录),当Redis重启时,它通过执行AOF文件中所有的命令来恢复数据。

       实现方式

AOF方式的数据持久化,仅需在redis.conf文件中配置即可配置项:

  1. appendonly:默认是no,改成yes即开启了aof持久化

  2. appendfilename:指定AOF文件名,默认文件名为appendonly.aof

  3. dir : 指定RDB和AOF文件存放的目录,默认是 ./,和RDB是同一个配置

  4. appendfsync:配置向aof文件写命令数据的策略:

    1. no:不主动进行同步操作,而是完全交由操作系统来做(即每30秒一次),比较快但不是很安全。

    2. always:每次执行写入都会执行同步,慢一些但是比较安全。

    3. everysec:每秒执行一次同步操作,比较平衡,介于速度和安全之间。这是默认项。

  5. auto-aof-rewrite-min-size:允许重写的最小AOF文件大小,默认是64M 。当aof文件大于64M时,开始整理aop文件, 去掉无用的操作命令。缩小aop文件。

  6. 查看该路径下的aof文件

  7. 使用dbsize看到没有key

  8. more testappendonly.aof

  9. 看到set k1和set k2之间没有get k1,不记录查询语句

  10. 和RDB一样退出时也保存

  11. 启动reids测试持久化

  12. 重启redis

  13. 可以看到重新启动之后数据还在

  14. 总结:
    1. append-only 文件是另一个可以提供完全数据保障的方案。

    2. AOF 文件会在操作过程中变得越来越大。比如,如果你做一百次加法计算,最后你只会在数据库里面得到最终的数值,但是在你的 AOF 里面会存在 100 次记录,其中 99 条记录对最终的结果是无用的,但 Redis 支持在不影响服务的前提下在后台重构 AOF 文件,让文件得以整理变小。

    3. 可以同时使用这两种方式,redis默认优先加载aof文件(aof数据最完整)。

dir ./  该配置含义

  1. 表示./redis-server在哪级目录启动,所生成的文件就在那保存,例如:
  2. 在redis-server上一级目录启动,所生成的文件就在该级目录保存
  3. 如果你指定了dir目录路径
  4. 不管在哪一级启动redis-server,该文件都会在你指定的目录
  5. 如果aof文件在你指定的路径中
  6. 如果你启动命令所在的目录中不存在aof文件

猜你喜欢

转载自blog.csdn.net/qq_39669058/article/details/87711932