Redis持久化

我们知道Redis是内存数据库,他将自己的数据库状态存储在内存中,那么当服务器进程退出,服务器中的数据库状态也会消失。

为了解决这个问题,Redis通过了两种持久化功能,分别是RDB持久化和AOF持久化

一、RDB持久化

RDB持久化可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点上的数据库状态保存到一个RDB文件中,RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状态。

扣张图看看

RDB文件是保存在硬盘里面的,所以即使Redis服务器进程退出,但只要RDB文件存在,Redis服务器就可以用它来还愿数据库状态。

①RDB文件的创建

在Redis中,有两个命令可以生成RDB文件,一个是SAVE,另一个是BGSAVE。

SAVE命令会阻塞Redis服务器进程,直到RDB文件创建完毕 ,在服务器进程阻塞过程中,服务器不能处理任何命令请求。

BGSAVE命令会派生出一个子进程,然后由子进程负责创建RDB文件,服务器进程继续处理命令请求 

 ②自动间隔性保存

因为BGSAVE命令可以在不阻塞服务器进程的情况下执行,所以Redis允许通过设置服务器配置的save选项来触发BGSAVE命令

打开Redis的配置,可以看到下面的配置

 那么,只要我们满足三个条件中的任意一个,BGSAVE命令就会被执行

服务器在900秒之内,对数据库进行了至少1次修改

服务器在300秒之内,对数据库进行了至少10次修改

服务器在60秒之内,对数据库进行了至少10000次修改

二、AOF持久化

与RDB持久化通过保存数据库中的键值对来记录数据库状态,AOF持久化是通过保存Redis服务器所执行的写命令来记录数据库状态。

抠图

 ①AOF文件的写入

打开Redis的配置文件,可以看到,有这么几个选项

 这三个选项的含义分别为

always:服务器在每个事件循环都要将aof_buf缓冲区的所有内容都写入到AOF文件中,并且同步AOF文件,对于效率来说,always是最慢的一个,但从安全性来说,always是最安全的,即使出现故障停机,AOF持久化也只会丢失一个事件循环中所产生的命令数据

everysec:服务器在每个事件循环都要将aof_buf缓冲区中的所有内容写入到AOF文件,并且每隔一秒都要在子线程中对AOF文件进行一次同步,从效率上来讲,everysec足够快,就算出现故障停机,数据库也只丢失一秒钟的命令数据

no:服务器在每个事件循环都要将aof_buf缓冲区中的所有内容写入的AOF文件,至于何时对AOF文件进行同步,则由操作系统决定。该模式下,单次同步时长是最长的,出现故障停机时,服务器会丢失上次同步AOF文件之后的所有写命令数据。

解释一下事件循环和aof_buf缓冲区

Redis服务器进程就是一个事件循环,这个循环负责接收客户端的命令请求,以及向客户端发送命令回复,在服务器执行写命令时,会使得一些内容被追加到aof_buf缓冲区里面,至于AOF文件的同步,则根据上述三种模式来进行相应的持久化行为。

抠张图,伪代码表示事件循环

 ②AOF文件重写

因为AOF持久化是通过保存被执行的写命令来记录数据库状态的,所以随着服务器的运行,AOF文件的内容会越来越多,文件的体积越来越大,如果不加以控制,体积过大的AOF文件很可能对Redis服务器,甚至是宿主机造成影响,而且还原数据库状态在载入AOF文件时也会花费更多的时间。

为此,Redis提供了AOF文件重写功能,通过该功能,Redis服务器可以创建一个新的AOF文件来替代现有的文件,新旧两个AOF文件所保存的数据库状态相同,但新的AOF文件不会包含任何浪费空间的冗余命令,所以新的AOF文件的体积通常会比旧AOF文件的体积小得多。

③AOF文件重写的实现

虽然Redis将生成新AOF文件替换为AOF文件的功能命名为“AOF文件重写”,但实际上,AOF文件重写不需要对现有的AOF文件进行任何读取、分析或者写入操作,这个功能是读取服务器当前的数据库状态来实现的。也就是说,Redis会遍历所有的数据,遍历每个数据库中的键,对没有过期的键进行重写,写入到新的AOF文件中去。

AOF重写可以很好的完成创建一个新的AOF文件的任务,但是,这个任务会进行大量的写入操作,所以在执行这个任务时,因为Redis服务器使用单个线程来处理命令请求,服务器将无法处理客户端的请求命令,为此,Redis决定将AOF重写放到子进程里执行,这样就可以同时达到两个目的:

a、子进程进程AOF重写期间,服务器进程仍然可以处理命令请求

b、子进程带有服务器进程的数据副本,使用子进程而不是线程,可以再避免使用锁的情况下,保证数据的安全性

三、还原数据库状态

在我们启动Redis服务器时,会载入RDB文件或者AOF文件来还原之前的数据库状态。

首先,因为AOF文件的更新频率通常比RDB文件的更新频率高,所以:

a、如果服务器开启了AOF持久化功能,那么服务器会优先使用AOF文件来还原数据库状态

b、只有在AOF持久化功能处于关闭状态时,服务器才会使用RDB文件来还原数据库状态

抠张图

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值