Redis持久化策略和过程

1、why

redis是内存数据库,它将自己的数据库状态存储在内存里面,如果不想办法把存储在内存中的数据库状态保存到磁盘里面,则当服务器进程退出或者服务器计算机异常宕机时,服务器中的数据库状态也会消失不见。所以需要持久化,把内存中的数据保存到磁盘中。

2、what

把redis在内存中的数据库状态保存到磁盘里面,避免数据意外丢失的过程。

3、how

两个持久化的机制:RDB持久化和AOF持久化

(1)RDB持久化

RDB持久化时,生成一个压缩的二进制文件,文件中记录了数据库状态,当redis服务器启动的时候,可以根据此文件还原RDB文件生成时的数据库状态。

RDB文件的创建:

可以使用两个redis命令来生成RDB文件,SAVE和BGSAVE。SAVE命令阻塞redis服务器进程,直到RDB文件创建完毕,在服务器阻塞期间,服务器不能处理任何命令请求。BGSAVE与SAVE不同,它会派生出一个子进程,由子进程负责创建RDB文件,服务器进程(父进程)继续处理命令请求。

命令的执行时机:

redis允许用户通过设置服务器配置的save选项,让服务器每隔一段时间自动执行一次BGSAVE命令。用户可以通过save选项设置多个保存条件,只要其中任何一个条件满足,服务器就执行BGSAVE命令。

比如设置了如下保存条件:

  • save 900 1:在15分钟内,如果至少有1个key发生变化,Redis就会自动触发BGSAVE命令创建快照。

  • save 300 10:在5分钟内,如果至少有10个key发生变化,Redis就会自动触发BGSAVE命令创建快照。

  • save 60 10000:在1分钟之后,如果至少有10000个key发生变化,Redis就会自动触发BGSAVE命令创建快照。

RDB文件的载入:

RDB文件的载入是在服务器启动的时候自动执行的,所以redis中并没有专门用于载入RDB文件的命令,只要redis服务器启动的时候检测到了RDB文件的存在,就会自动载入RDB文件。

PS:在redis中,AOF文件的更新频率通常比RDB文件的更新频率要高,所以如果服务器开启了AOF持久化功能,服务器会优先使用AOF文件来还原数据库状态。

(2)AOF持久化

AOF持久化是通过保存redis服务器所执行的写命令来保存数据库状态的,也即AOF文件中保存的是redis服务器执行的命令。这样的话,当服务器启动的时候,就可以通过载入和执行AOF文件中保存的命令来还原服务器关闭之前的数据库状态。

AOF持久化是以日志的形式记录每一个增删操作,会将所有增删操作通过write函数追加到文件中。AOF的出现是为了弥补RDB的不足(数据的不一致性),所以它采用日志的形式来记录每个写操作,并追加到文件中。Redis 重启会通过执行文件中保存的写命令在内存中重建整个数据库的内容。与快照持久化相比,AOF 持久化的实时性更好,因此已成为主流的持久化方案。 默认情况下 Redis 没有开启 AOF持久化,可以通过设置 appendonly 参数开启:

  • appendonly yes

Redis通过fork出子进程,子进程根据内存中的快照,往临时文件中写入重建数据库状态的指令,父进程继续处理请求,当子进程将快照内容写入到临时文件中则发信号通知父进程将缓存中的写操作也写入到临时文件中,最后使用临时文件替代旧备份文件并进行重命名。AOF 文件的保存位置和 RDB 文件的位置相同,都是通过 dir 参数设置的,默认的文件名是 appendonly.aof。在 Redis 的配置文件中存在三种不同的 AOF 持久化方式,它们分别是:

  • appendfsync always:每次有数据修改发生时都会写入AOF文件

  • appendfsync everysec:每秒钟同步一次,将多个写命令同步到硬盘

  • appendfsync no:让操作系统决定何时进行同步

用户可以使用appendfsync everysec选项 ,让 Redis 每秒同步一次 AOF 文件,这样Redis性能几乎不会受到影响,而且这样即使出现宕机,用户最多只会丢失一秒之内产生的数据。当硬盘忙于执行写入操作的时候,Redis 还会优雅的放慢自己的速度以便适应硬盘的最大写入速度。

4、优缺点

(1)RDB

优点:

  • 只有一个备份文件dump.rdb,方便持久化备份;

  • 容灾性好,一个文件可以保存到其他存储介质;

  • 性能最大化,fork出子进程来完成写操作,让主进程继续处理命令,所以是IO最大化(使用单独子进程来进行持久化,主进程不会进行任何IO操作,保证了redis的高性能) ;

  • 如果数据集偏大,RDB的启动效率会比AOF更高。

缺点:

  • 数据安全性低。

  • 如果当数据集较大时,可能会导致整个服务器停止服务。

(2)AOF

优点:

  • 数据安全性更高,AOF持久化可以配置appendfsync属性

  • 通过append模式写文件,即使中途服务器宕机,可以通过redis-check-aof工具解决数据一致性问题。

  • AOF机制的rewrite模式。

缺点:

  • AOF文件比RDB文件大,且恢复速度慢;

  • 数据集大的时候,比RDB启动效率低。

  • 根据同步策略的不同,AOF在运行效率上往往会慢于RDB。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值