Redis 持久化策略解析

Redis是内存数据库,一旦redis服务关停,内存中的数据都会被清空,所以 内存数据库 提供了数据落地的策略

Redis中持久化策略有两个 RDB 和 AOF

RDB:

首先指定把数据保存到哪个地方 config set dir E: 设置保存文件夹, config set dbfilename dumb.rdb 设置保存文件

RDB可以手动用 bgsave触发(会启用一个子线程来处理,不会block主线程处理其他命令,就用这个吧)

也可以被动触发save m n 表示在m 秒内发生了n次数据变更 会触发一次存储,实际也用的是bgsave

RDB文件,会在Redis启动时自动加载,但是AOF模式的优先级更高,所以会先载入AOF文件,只有AOF模式关闭的情况(redis加载数据完成不会再载入另一个落地库),才会检测RDB的文件,用RDB载入会阻塞

AOF:

Redis服务器默认使用RDB模式,AOF需要在配置文件中开启 appendonly yes

AOF模式支持 3 种写入模式

append -- Redis先将写命令追加到缓冲区,而不是直接写入文件,主要是为了避免每次有写命令都直接写入硬盘,导致硬盘IO成为Redis负载的瓶颈。

文件写入(write)和文件同步(sync):

AOF缓存区的同步文件策略由参数appendfsync控制,各个值的含义如下:

  • always:命令写入aof_buf后立即调用系统fsync操作同步到AOF文件,fsync完成后线程返回。这种情况下,每次有写命令都要同步到AOF文件,硬盘IO成为性能瓶颈,Redis只能支持大约几百TPS写入,严重降低了Redis的性能;即便是使用固态硬盘(SSD),每秒大约也只能处理几万个命令,而且会大大降低SSD的寿命。
  • no:命令写入aof_buf后调用系统write操作,不对AOF文件做fsync同步;同步由操作系统负责,通常同步周期为30秒。这种情况下,文件同步的时间不可控,且缓冲区中堆积的数据会很多,数据安全性无法保证。
  • everysec:命令写入aof_buf后调用系统write操作,write完成后线程返回;fsync同步文件操作由专门的线程每秒调用一次。推荐

rewirte -- 文件重写是指定期重写AOF文件,减小AOF文件的体积

 

RDB文件紧凑,体积小,网络传输快,适合全量复制;恢复速度比AOF快很多。当然,与AOF相比,RDB最重要的优点之一是对性能的影响相对较小。

与RDB持久化相对应,AOF的优点在于支持秒级持久化、兼容性好,缺点是文件大、恢复速度慢、对性能影响大。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值