Redis学习(二)—— AOF持久化

1、AOF文件通过保存修改数据库的写命令请求来记录服务器的数据库状态

所有命令都是以Redis命令请求协议的格式进行保存。AOF持久化功能的实现是通过命令追加、文件写入、文件同步三个步骤来完成的。
(1)当AOF持久化功能开启时,在执行数据库的写入命令时,服务器会将该写入命令加入到redisServer所维护的一个aof_buf缓存区的末尾。
(2)文件进行写入时,因为 Redis服务器进程是一个事件循环,在每次执行事件循环的过程中,可以理解为文件事件负责接收客户端的命令请求,以及向客户端返回命令回复,而时间事件负责执行类似于serverCron函数这样的周期性函数。 回到文件写入,每次循环事件执行时,都会调用flushAppendOnlyFile函数,考虑是否需要将aof_buf缓冲区的内容写入到AOF文件中,而至于函数如何控制学日和同步,则是通过下面提到的配置选项来决定的。

2、appendfsync选项的不同值会对AOF持久化的安全性和服务器的性能造成很大程度的影响

对于服务器何时将缓冲区的内容写入并同步到AOF文件中,Redis服务器通过上面提到的appendfsync选项的不同值来决定:
always => 将缓冲区的所有内容都写入并同步到AOF文件中。
everysec => 将缓冲区的内容写入到AOF文件中,如何距离上次同步已经超过了一秒钟,那么再次对AOF文件进行同步,需要注意的是,会有专门的线程来负责该同步操作。
no => 将缓冲区的内容写入AOF文件中,但是不对文件做同步操作,至于何时来同步,由操作系统来决定。

3、服务器在加载AOF文件时,是通过重新执行其中的请求命令进行还原数据库的状态

在重新加载AOF文件中写入命令来还原数据库的状态的过程,可分为以下步骤:
(1)创建一个不带网络连接的伪客户端(fake client),因为该客户端只需要执行AOF文件中的写入命令,以此来完成数据库装态的恢复,所以,不需要进行网络连接。
(2)从AOF文件中分析并读取出写命令。
(3)使用伪客户端执行这条写命令。
(4)反复执行步骤(2)和步骤(3),直到AOF文件中的写入命令执行结束,这样数据库状态就得到了恢复。

4、AOF重写会产生一个新的AOF文件,只不过相比之下,体积更小

随着时间的流逝和业务不断的扩展,会使得数据库中数据的不断膨胀,Redis服务器执行的写入命令也会不断地累积,对于服务器来说,将所有的写入命令保存下来,写入到AOF文件中,冒失不是非常合理,这也不符合开发逻辑,所以,在AOF重写产生新的AOF文件时,服务器会先读取数据库中的值,而是用一条写入命令来表示当前数据库的状态,这样,AOF文件的提及会变得小很多,同时,在加载过程中,也会减轻服务器的压力。

5、在执行BGREWRITEAOF命令时,Redis服务器会维护一个AOF重写缓存区,该缓存区的作用就是,在子进程创建新的AOF文件时,记录服务器执行的所有的写命令。

因为Redis服务器使用单线程来处理命令请求,当服务器调用aof)_rewrite函数,创建新的AOF文件过程中,服务器将无法处理客户端发来的命令请求。所以,为了提高Redis服务器的高效使用,我们将AOF重写操作放到子进程里来完成。
而上面这种方法会引发一个问题,既然要还原数据库的状态,肯定要确保数据的一致性,也就是不能漏掉任何一个数据库写入命令。Redis服务器通过维护一个AOF重写缓存区来进行追加AOF文件重写过程中服务器执行的命令请求操作。在子进程AOF文件重写结束后,服务器进程会将AOF重写缓存区的命令追加到新的AOF文件的末尾。 这也是AOF后台重写的原理,就简单介绍到这里。

本项目是一个基于SSM(Spring+SpringMVC+MyBatis)框架和Vue.js前端技术的大学生第课堂系统,旨在为大学生提供一个便捷、高效的学习和实践平台。项目包含了完整的数据库设计、后端Java代码实现以及前端Vue.js页面展示,适合计算机相关专业的毕设学生和需要进行项目实战练习的Java学习者。 在功能方面,系统主要实现了以下几个模块:用户管理、课程管理、活动管理、成绩管理和通知公告。用户管理模块支持学生和教师的注册、登录及权限管理;课程管理模块允许教师上传课程资料、设置课程时间,并由学生进行选课;活动管理模块提供了活动发布、报名和签到功能,鼓励学生参与课外实践活动;成绩管理模块则用于记录和查询学生的课程成绩和活动参与情况;通知公告模块则实时发布学校或班级的最新通知和公告。 技术实现上,后端采用SSM框架进行开发,Spring负责业务逻辑层,SpringMVC处理Web请求,MyBatis进行数据库操作,确保了系统的稳定性和扩展性。前端则使用Vue.js框架,结合Axios进行数据请求,实现了前后端分离,提升了用户体验和开发效率。 该项目不仅提供了完整的源代码和相关文档,还包括了详细的数据库设计文档和项目部署指南,为学习和实践提供了便利。对于基础较好的学习者,可以根据自己的需求在此基础上进行功能扩展和优化,进一步提升自己的技术水平和项目实战能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值