Redis持久探

1.1持久化

        Redis对外提供数据访问服务时使用的是内存中的数据,当Redis重启后数据将消失,为了让数据再重启后得以恢复,因此Redis提供了两种持久化方式,分别是:全量模式(RDB)和增量模式(AOF)。

1.1.1基于全量模式的持久化

        RDB持久化是把当前进程数据生成快照保存到硬盘的过程,包含两种方式:SAVE和BGSAVE。

  • SAVE命令:阻塞当前Redis服务器,直到RDB过程完成为止,期间其他所有命令不会并发执行,所以即便写入磁盘的过程持续时间很长,数据的状态始终是一致的,不会发生变更,对于内存比较大的实例会造成长时间阻塞。
  • BGSAVE命令:Redis进程fork出一个子进程,然后Redis进程继续处理后续命令,fork出的子进程负责持久化。

        BGSAVE相比于SAVE的优势是持久化期间可以提供数据读写服务,作为代价,子进程fork时,涉及父进程内存的复制,其存在期间会增加服务器内存的开销,BGSAVE的fork会阻塞服务器运行,造成秒级以上的不可用。

1.1.2基于增量模式的持久化

        AOF持久化以独立日志的方式记录每次写命令,重启时在重新执行AOF中的命令达到恢复数据的目的。AOF的主要作用时解决了数据持久化的实时性。AOF的工作流程如下

        随着命令不断写入AOF,会不断的产生新的数据append到aof文件中,文件会越来越大,占用了大量的磁盘空间,同时降低Redis启动时的回放加载效率。重写运行流程如下

        一旦Redis发现Rewrite条件满足,则主进程fork出一个子进程,主进程fork完成后,继续响应其他命令,子进程采用写时复制技术,共享fork操作时的内存数据。新的增量写入aof_rewrite_buf中,待子进程完成后,这部分内容将append到重写的快照文件末尾,在后续的增量,会写入到新的aof文件中。

1.1.3两种模式优缺点

        RDB使用一次性生成内存快照的方式,产生的文件紧凑压缩比更高,因此读取rdb恢复更快,但是无法做到实时持久化,一般用于数据冷备和复制传输。

        AOF通过追加写命令到文件实现持久化,可以控制实时持久化,随着AOF文件体积越来越大,需要定期执行重写操作来降低文件体积。

转载于:https://my.oschina.net/wuchanghao/blog/1819393

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值