Redis学习笔记(2)---持久化

Redis提供了不同级别的持久化方式:

  • RDB:指的是在指定时间间隔内将内存的数据进行快照存储。
  • AOF:以日志的方式来记录每一次写的操作,追加到文件的末尾而不是改写文件
  • 在同时开启两种持久化方式的时候,Redis优先载入aof文件来恢复原始的数据,因为aof文件中的数据集要完整一些。

RDB的优点:

  • RDB是一个非常紧凑的文件,它保存了某个时间段的数据集,非常适用于数据集的备份,例如你可以在每个小时保存过去24小时内的数据,同时也可以每天保存过去30天的数据。
  • RDB是一个紧凑的单一文件,可以很方便传送到另一个数据远程中心,这样可以应对于硬件损坏等意外导致的数据丢失。
  • RDB在保存RDB文件时父进程唯一需要做的就是fork(复制)一个子进程,接下来的工作都交给子进程来做,父进程不需要再做其他的IO操作,这样可以最大化Redis的性能
  • 与AOF相比,在恢复大的数据集是,RDB方式会更快一些。

RDB的缺点:

  • RDB方式在redis意外停止工作时,有可能会丢失最后一次数据。
  • Redis在持久化比较大的数据集,因为父进程要fork一个子进程来进行操作,所以需要双倍的空间,这个是比较耗时的。

AOF的优点:

  • 可以带来更高的数据安全性,持久性,有三种不同的同步策略,每秒同步,每修改同步,不同步。默认使用每秒同步
  • AOF是一个只进行追加的日志文件,就算在写入过程中遇到宕机或者磁盘满了等情况,也不会破坏之前日志文件中已经存在的内容,可以使用Redis-check-aof工具修复这些问题。
  • Redis在AOF文件变得很大时,会自动的在后台对AOF文件进行重写,整个重写过程中是非常安全的,因为在创建新的AOF文件过程中,会继续将命令追加到老的AOF文件,即使出现停机等状况,老的AOF文件也不会丢失。当新的AOF文件创建成功,Redis会自动切换,并且将命令追加到新的AOF文件。
  • AOF文件保存的写入操作是以Redis协议的格式保存,非常容易让人看懂并且分析。

AOF的缺点:

  • 相同的数据集,AOF文件的体积要大于RBD文件的体积,因为数据的完整性要高一些,所以在恢复大数据集时,RDB要比AOF速度快。
  • 根据所使用的同步策略,AOF的速度有可能会比RDB慢,默认的每秒同步效率还是很高的,而不同步的效率和RDB是一样高的

常用配置:

  • RBD配置:
    Redis默认会将数据集的快照保存在dump.rdb文件中,我们可以在配置文件中配置N秒内数据集有M次改动时自动保存一次数据集,例如:
    save 120 10  一百二十秒内有十次改动就自动进行保存。
    
    或者我们可以使用 save 或bgsave命令进行手动保存。
    这种持久化方式叫做快照(snapshotting)
  • AOF配置:
    appendonly yes  默认是no,我们需要修改配置文件改成yes才能开启aof持久化方式
    同步策略:
    		appendfsync always  #每次修改都会同步追加到aof文件中,最慢,但是非常安全
    		appendfsync everysec #每秒进行同步一次,这是aof默认配置,速度快,兼顾了速度和安全性,出故障也只会丢失一秒钟的数据
    		appendfsync no #从不同步,高效,但是数据不会持久化,意味着更快但是不安全
    		auto-aof-rewrite-min-size #aof文件重写需要的尺寸,比如到了5G之后进行重写
    		auto-aof-rewrite-percentage #aof文件增长率,比如翻一倍了就就进行重写
    

AOF文件损坏之后如何进行修复:
1)为现有aof文件进行备份
2)使用redis-check-aof工具进行修复:

	redis-check-aof -fix filename

3)重启服务器,等待服务器载入修复后的aof文件,并进行数据恢复

RDB和AOF的工作原理:

  • RDB:
    1)Redis fork一个子进程,这个时候同时有父进程和子进程
    2)子进程将数据集写入到临时RDB文件中
    3)子进程完成写入,Redis会使用这个临时文件替换旧的RDB文件,并删除旧的
    这种工作方式可以从写时复制(copy-on-write)机制中获益。
  • AOF:
    1)第一步与RDB相同,fork一个子进程
    2)子进程将新的aof文件中的内容写入到临时文件中
    3)对于新执行的写入命令,父进程一边将它们积累到一个内存缓存中,一边将新的命令追加到现有的aof文件中,(这样即使在重写的过程中出现问题,现有的aof文件也是安全的)
    4)当子进程完成重写时,会向父进程发送一个信号,父进程接收到信号后会将内存中的缓存数据追加到新的AOF文件末尾。
    5)使用新的aof文件替换旧的文件,数据追加到新文件的末尾。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值