Redis-持久化策略

Redis-持久化策略

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

  • 由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。

  • redis提供两种方式进行持久化

  1. RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上)
  2. AOF持久化(原理是将Reids的操作日志以追加的方式写入文件)。

1.RDB方式

A、什么是RDB方式?

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

  • RDB保存了某个时间点的数据集(全部数据)。存储在一个二进制文件中,只有一个文件。
    默认是dump.rdb。

  • RDB技术非常适合做备份,可以保存最近一个小时,一天,一个月的全部数据。保存数据是在单独的进程中写文件,不影响Redis的正常使用。

  • RDB恢复数据时比其他AOF速度快

    rdb相当于数据的快照

B、如何实现

  • RDB方式的数据持久化,仅需要在redis.conf文件中配置即可,默认配置是启用的
  • 在配置文件redis.conf中搜索SNAPSHOTTING,查找在注释开始和结束之间关于RDB的配置说明
  • 配置SNAPSHOTTING地方共三处
  1. 配置进行RDB生成快照文件的时间策略。
    对redis进行设置,让它在“N秒内数据集至少有M个key改动”这一条件被满足时,自动保存一次数据集
    配置格式:save <seconds><changes>

    save 900 1
    save 300 10
    save 60 10000
    
    
  2. dbfilename:
    设置RDB的文件名,默认文件名是dump.rdb

  3. dir:指定RDB文件的存储位置,默认是./当前目录

   

2.AOF方式

A、什么是AOF方式

  • Append-onlyFile(AOF), Redis每次接收到一条改变数据的命令时,它将把 该命令(语句) 写到一个AOF文件中
    (只记录写操作,读操作不记录)

  • 当redis重启时,它通过执行AOF文件中所有的命令来恢复数据
    aof相当于日志记录操作命令

B、如何实现

  • AOF方式的持久化,仅需在redis.conf文件中配置即可
  • 配置项
  1. appendonly:默认是no,改成yes即开启了aof持久化
  2. appendfilename:指定AOF文件名,默认是appendonly.aof
  3. dir:指定RDB和AOF文件存放的目录,默认是./
  4. appendfsync:配置向aof文件写命令数据的策略:
    1. no:不主动进行同步操作,而是完全交由操作系统来做(每30秒一次),比较块但是不是很安全
    2. always:每次执行写入都会执行同步操作,慢一些但是比较安全
    3. everysec:每秒执行一此同步操作,比较平衡,介于速度和安全之间。这是默认项

   

RDB与AOF各自的优缺点

RDB的优点:

  • 由于存储的是数据快照文件,恢复数据很方便,也比较快,适合做备份
    rdb是redis性能最大化的体现,它不用每秒监控是否有数据写入,当达到触发条件后就自动fork一个子进程进行全量更新,速度也很快。容灾恢复方面rdb更是能够快速的恢复数据,而aof需要读取再写入,相对慢了很多。

RDB的缺点:

  • 会丢失最后一次快照以后更改的数据。 如果你的应用能容忍一定的数据丢失,那么使用rdb是个不错的选择;
  • 由于需要经常操作磁盘,RDB会分出一个子进程。如果你的redis数据库很大的话,子进程占用比较多的时间,并且可能会影响Redis暂停服务一段时间(millisecond级别),如果你的数据库超级大并且服务器CPU比较弱,有可能会达到一秒。耐久性差: 相对aof的异步策略来说,因为rdb的复制是全量的,即使是fork的子进程来进行备份,当数据量很大的时候对磁盘的消耗也是不可忽视的,尤其在访问量很高的时候,fork的时间也会延长,导致cpu吃紧,耐久性相对较差。

AOF的优点:

  • 数据保证(安全性): 我们可以设置fsync策略,一般默认是everysec,也可以设置每次写入追加,所以即使服务死掉了,咱们也最多丢失一秒数据。
    安全性来讲由于aof的记录能够精确到秒级追加甚至逐条追加,而rdb只能是全量复制,aof明显高于rdb。
  • 自动缩小: 当aof文件大小到达一定程度的时候,后台会自动的去执行aof重写,此过程不会影响主进程,重写完成后,新的写入将会写到新的aof中,旧的就会被删除掉。

AOF的缺点:

  • 性能相对较差:它的操作模式决定了它会对redis的性能有所损耗

  • 恢复速度更慢: 容灾恢复方面rdb更是能够快速的恢复数据,而 aof需要读取再写入 ,相对慢了很多。

  • 体积相对更大:尽管是将aof文件重写了,但是毕竟是操作过程和操作结果仍然有很大的差别,体积也毋庸置疑的更大。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值