【redis学习之三】Redis数据持久化

RDB

    RDB持久化功能会将redis内存快照保存到磁盘中,避免数据意外丢失,所生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状态。

    RDB文件会在服务器启动时自动载入,而我们可以用SAVE和BGSAVE两个命令来手动触发RDB持久化操作,但是SAVE命令会阻塞服务器,此时redis将不能处理客户端请求。用户可以在redis.conf设置RDB自动持久化条件,例如:

save  900  1       save  300  10    save  60  10000   分表表示  900秒内对数据库至少进行了一次修改,300秒内对服务器至少进行了10次修改,10000秒内对服务器至少进行了60次修改则会触发RDB文件写入操作,用户可以根据需求设置相应的触发条件。

    BGSAVE模式RDB文件写入时采用了写时复制,即是当持久化开始时子线程仅保存开始一瞬间的数据快照,对于开始后数据集的新增修改不予保存,若有新接收的修改操作,将把原老数据复制一份

    注意每次RDB文件的写入都是全量的


AOF(append only file)

    AOF持久化通过保存redis服务器所执行的写命令来记录数据库的状态,被写入AOF文件的所有命令都是以redis命令请求协议格式保存的。实现可分为三步:

1、命令追加:当AOF处于打开状态时,服务器在执行完一个写命令后,会议协议格式将被执行的写命令追加到服务器状态的aof_buf缓冲区末尾

2、写入:将缓冲区的内容flush写入AOF文件中

3、同步:根据服务器设置的appendfsync选项对AOF文件进行同步操作

    appendfsync可设置为:①always,总是同步,每次有新的写请求马上同步,数据安全性最高,就算出现停机,也只会丢失一个事件循环中产生的命令数据,但是相对来说最耗费性能;②everysec,每秒同步一次,提供较高的安全性,同时兼顾性能;③no,将aof_buf所有内容写入AOF文件,但是同步动作交由操作系统决定何时去做;用户可以根据自身应用具体情况选择合适的同步策略。

    AOF文件的载入与还原将在redis重启时发生,redis将取出AOF文件中所有指令语句,逐一执行。

    随着redis运行时间的增长,AOF文件会越来越大,为解决AOF文件体积膨胀的问题,redis提供了AOF文件重写功能,原理即是将对同一个对象的多次操作合并成一条操作语句


二者比较:

1、AOF的更新频率通常比RDB更高,因此AOF的数据安全性一般来说是要优于RDB的,但是同等数据量下AOF文件通常要比RDB文件更大,重启时也是RDB恢复速度更快

2、如果服务器开启了AOF持久化功能,那服务器会优先使用AOF文件来还原数据库状态,只有AOF关闭时,才会使用RDB恢复数据库状态

3、通常在redis集群中,我们会设置master和salves读写分离,master负责写操作,salves负责读操作,此时可以设置master为AOF,salves设置为RDB,减少master写操作的丢失几率

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值