Redis两种持久化方式——RDB和AOF

        Redis的持久化简单来说就是异步的把内存中的数据保存到硬盘上,Redis提供了两种持久化的方式分别是RDB和AOF。

  • RDB

        RDB是一种使用快照方式的持久化,它会把当前的数据像拍照一样照下来,生成RDB文件保存到硬盘,是一个整个的形式,而AOF是一种日志式的持久化,每一条更新都会写入AOF。生成的RDB文件在Redis启动时可以载入,恢复数据,并且该RDB文件是一个有自己格式的二进制文件。

       RDB有三种触发机制,分别是save,bgsave,通过配置自动触发。

save:

        该方法是同步阻塞的,也就是说在Redis生成好RDB文件前是阻塞的,在使用时要注意这一点,此外如果存在老的RDB文件,新文件会替换老文件。

bgsave:

        该方法通过fork方法创建一个子进程来实现生成RDB文件的任务,子进程会使用CPU,IO,内存等资源,在单机多部署,或者数据量大等情况时要考虑到bgsave带来的开销和对性能的影响。同样该方法也是新文件会替换旧文件。

配置自动触发:

save 时间(s)  时间内修改的次数

dbfilename 文件名

stop-write-on-bgsave-error  yes   bgsave发生错误时停止写入

rdb compression yes 采用压缩存储RDB文件

rdb checksum yes 检验和检验

满足上面的时间内发生的修改次数就会触发生成RDB文件,其他的命令是生成RDB过程中的一些设置。

此外还有一些形式能够触发RDB,即使RDB已经被关闭:

1.主从复制时的全量复制,是以RDB的形式实现的

2.debug reload

3.shutdown

  • AOF

AOF是一种以日志的形式来实现持久化的,在AOF文件中记录操作从而保证能够恢复数据,有点像MYSQL中的redo log。

        AOF有三种策略,always是每条命令都fsync到硬盘,everysec是每一秒把缓冲区fsync到硬盘,no是由OS来决定什么时候写入AOF文件。但是如果每一条命令都写入文件在某些情况显的没有必要,比如对string类型的键修改值,只要保存最后一条修改记录就可以了,可以让AOF文件简洁,这种形式叫做AOF重写,是对原生的AOF的优化,类似于编译器对代码的优化。使得AOF文件变小,减少硬盘占用量,加快恢复数据的速度。

AOF重写有两种实现方式:bgrewriteaof命令和配置文件中设置实现。

bgrewriteaof:

具体的AOF重写流程:

配置文件设置:

auto_aof_rewrite_min_size :of文件重写需要的尺寸(aof文件多大时才重写)

auto_aof_rewrite_percentage :aof文件增长率(进行一次重写后下一次多大时再重写)

aof_current_size :aof文件当前大小(字节)

aof_base_size :aof上次启动和重写时的大小(字节)

同时满足一下两个条件时会自动进行AOF重写:

aof_current_size>auto_aof_rewrite_min_size

(aof_current_size-aof_base_size)/aof_base_size>auto_aof_rewrite_percentage

此外还有一些参数:

appendfilename 文件名:设置文件名

appendfsync 策略名:设置策略

no_appendfsync_on_rewrite:AOF重写时是否做AOF正常的append操作

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卷福。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值