redis持久化

1、 redis持久化的方式

1、 RDB,rdb是redis将当前进程数据以快照的方式保存到硬盘的过程
2、 AOF,aof是redis以独立的日志方式记录每次写命令,在重启的时候执行aof日志文件中的命令以达到恢复数据的目的。

2、 RDB

2.1、RDB的触发机制

rdb既然是通过快照的方式保存当前的进程里面的数据,那么使用rdb的方式什么时候将数据进行持久化呢。则就要么手动触发,要么自动触发。
手动触发
redis可以通过命令的方式进行手动触发rdb机制进行数据的持久化,主要通过两个命令 save、和bgsave
save命令,redis通过save命令进行手动持久化,该命令是通过redis主线程进行操作,由于redis是单线程进行数据的读写操作,name在进行save命令的时候,如果数据过大则会长时间阻塞主线程,直到持久化的过程完成。
bgsave命令,由于save命令会阻塞线程的确定,redis提供了bgsave的命令来优化save命令。使用bgsave命令,redis会在主线程中会执行frok操作创建一个子进程,然后将持久化的过程有fork出来的子进程去执行,在这个过程当中,redis主线程只执行了一个frok操作,只会阻塞fork创建子进程的这段时间。

自动触发

除了以上通过命令进行手动触发外,redis内部还可以通过配置文件的形式进行自动触发。自动触发使用的方式与使用bgsave命令手动触发的方式一致。
1、redis自动触发需要对save配置进行配置,配置方式为 save m n 表示在m秒内有n次修改时会进行自动触发。
2、从节点执行全量复制操作,主节点会自动执行bgsave生成rdb文件发送给从节点。
3、 执行shutdown命令时,redis如果没有开启aof持久化会自动触发bgsave。
4、 redis不对save配置信息进行配置,会关闭自动触发bgsave的功能。

2.2、RDB的优缺点

优点:rdb文件是一个压缩后的二进制文件,代表着某个时间点上redis的数据文件,可以用于reids数据的备份,全量复制。
也可以将rdb文件拷贝到其他机器当中存储,可以用于异地备份和灾难恢复。
并且redis执行rdb文件进行数据恢复是要比aof快。
缺点:rdb的出发方式决定了无法做到rdb实时或者秒级数据的持久化,bgsave执行fork操作创建子进程属于操作系统当中一个比较重量级的操作,过于频繁的话,执行成本会比较高。
rdb文件是redis进行压缩后的二进制文件,在不同的版本下redis因为压缩算法的不同,可能无法兼容其他版本的rdb文件。

3、AOF

针对于RDB不适合于实时持久化的缺点,redis提供了AOF的方式进行持久化。

3.1、开启AOF

配置文件当中使用配置appendonly yes
配置详情
启用aof持久化方式:appendonly yes
写入磁盘方式:appendfsync [always|everysec|no]
正在导出rdb快照的过程中,要不要停止同步aof: no-appendfsync-on-rewrite yes
aof文件大小增长重写策略(百分比):auto-aof-rewrite-percentage 100
aof文件最小大小重写策略:auto-aof-rewrite-min-size 64mb
存储文件名称:appendfilename test.aof
存储路径: dir /usr/local/redis

3.2、AOF执行流程

1、 命令写入,所有的写入命令redis会将其加载到AOF缓冲区。
2、 存储aof文件,AOF缓存区会根据配置的刷盘策略将缓冲区的数据写入到aof文件当中。
3、 aof文件重写优化,aof文件随着时间的增长,文件会越来越大,redis会根据配置的重写策略定期的将aof文件重写,已达到压缩优化aof文件的目的。
4、 当redis服务重启时会加载aof文件进行数据恢复。

3.2.1、命令写入

redis在命令写入的时候为什么要加载待aof缓冲区而不直接写入到硬盘:
redis如果每次命令写入的时候都同步到硬盘,性能就取决于当前硬盘的负载性能。先写入到缓存区,redis提供多种缓冲区同步到硬盘的策略,可以根据这些策略在不同的业务情节下由用户自己去权衡数据一致性与性能的平衡。

3.2.2、文件写入

redis通过刷盘策略appendfsync配置进行数据从aof缓冲区写入到硬盘。
appendfsync配置主要分为always、everysec、no三种模式
always模式
命令写入后调用操作系统的fsync操作同步到aof文件,fsync操作完成之后返回。
everysec模式:
命令在写入后调用操做系统的write操作,write操作后直接返回,由其他的线程每秒调用fsync操作进行数据最终写入到aof文件中
no模式:
命令在写入后调用操作系统的write操作,write操作后直接返回,并且不主动的对write的数据进行fsync操作,最终的数据写入到硬盘有操作系统去决定。
说明:write 和fsync是属于操作系统层次的操作
fsync是操作系统对单个文件进行强制性的硬盘同步,fsync将阻塞知道硬盘数据写入完成后返回,保证了数据的持久化。
write操作操作系统会触发延迟写的机制来处理数据,操作系统会将数据写入到一个io系统缓冲区,wirte操作在数据写入到系统缓冲区后会直接的返回,同步硬盘的操作取决于操作系统的调度机制,如果在操作系统未进行调度之前,服务器突然断电则会导致数据的丢失。

3.2.3、文件重写

随着aof文件的越来越大,redis会对aof文件数据进行重写。重写主要是优化写入数据,把一些,超时、重复的操作进行删除或则合并优化,以降低aof文件空间,达到能够快速加载数据。
重写触发机制:
1、 通过bgwriteaof命令手动调用
2、 通过 auto-aof-rewrite-percentage和auto-aof-rewrite-min-size的配置参数自动确定重写触发时机。

4、 Redis重启时加载文件顺序

rdb和aof文件都可以用于redis重启后对数据的恢复,那么redis重启时什么样的顺序进行操作rdb和aof文件的?
1、 redis 启动,检测是否开启了aof,如果没有开启,加载rdb
2、 如果开启了aof,加载aof

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值