Java教程

Redis(二十,Java知识总结

本文主要是介绍Redis(二十,Java知识总结,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

首先初始化服务器的第一步就是创建一个redisServer类型的实例变量server来作为服务器的状态,并且为结构中的各个属性去设置默认值

初始化server变量的工作是由redis.c/initServerConfig函数去完成的,完成的主要工作如下所示

  • 设置服务器的运行ID

  • 设置服务器的默认运行频率

  • 设置服务器的默认配置文件路径

  • 设置服务器的运行架构

  • 设置服务器的默认端口号

  • 设置服务器的默认RDB持久化条件和AOF持久化条件

  • 初始化服务器的LRU时钟

  • 创建命令表

initServerConfig主要是设置服务器状态的一些基本信息,并不会去创建数据结构(除了命令表,前面提到的用于找RedisCommand结构的字典)。

载入配置选项

完成了初始化服务器状态结构后,就可以进入初始化第二个状态,开始载入配置选项了。

在启动Redis服务器的时候,是可以通过启动命令后面追加参数来修改选项的

举个栗子

redis-server --port 10086 //使用10086端口

redis-server redis.conf //使用redis.conf的配置文件

所以,在加载了默认配置后,还会去载入配置选项,进行对应属性修改

服务器在用initServerConfig函数初始化完server变量之后,就会开始载入用户给定的配置参数或者配置文件,并根据用户设定的配置,对server变量(初始化的服务器状态)的相关属性的值进行更改

  • 如果用户为这些属性的相应选项设置了新的值,那么服务器就使用用户指定的值来更新相应的属性

  • 如果用户没有为这些属性去设置新的值,那么服务器就会验用之前的InitServerConfig函数为属性设置的默认值

初始化服务器数据结构

服务器在载入用户指定的配置文件后,就代表基本信息已经完成初始化了,现在可以开始初始化服务器状态里面的数据结构了。

前面提到过,initServerConfig对于数据结构,只会去初始化命令表,不过除了命令表之外,服务器状态还包含其他数据结构,比如下面的这些

  • server.clients链表,这个链表记录了所有与服务器相连的客户端的状态结构,里面的每一个元素都是一个客户端,即redisClient结构

  • server.db数组,存储Redis服务器里面所有数据库的数组

  • server.pubsub_channels字典与server.pubsub_patterns链表,前者用于保存频道订阅信息,后者用于保存模式订阅信息

  • 用于执行Lua脚本的lua环境server.lua

  • 用于保存慢查询日志的server.slowlog属性

当初始化到这一步时,就会去执行initServer函数,为以上提到的数据结构分配内存,并且在有需要的时候会关联初始化值。

为什么要放在这里去执行初始化数据结构呢?

**这是因为在配置文件中,是包含对这些数据结构信息的,必须要载入配置选项,才可以正确无误地去初始化数据结构,这其实也是为什么,初始化过程分成

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

了两个函数去执行,第一个是initServerConfig去主要负责初始化一般属性,而initServer去主要初始化数据结构**

除了初始化数据结构之外,initServer还需要去执行下面的一些操作

  1. 为服务器设置进程信号处理器(处理进程之间的通信,主要是父子进程)

  2. 创建共享对象(比如经常用到的一些回复字符串对象,还有前面提到过,服务器会一开始初始化1~10000的字符串对象,用于共享字符串,节约空间)

  3. 打开服务器的监听端口,并为监听套接字关联连接应答处理器,等待服务器正式运行时接收客户端的连接(连接过程是先要有一个监听套接字给客户端连接,产生AE_READABLE事件,触发连接应答处理器,然后进行一系列处理)

  4. 为serverCron函数创建时间事件(周期时间事件),等待服务器正式运行时执行serverCron函数

  5. 初始化服务器的后台I/O模块,为持久化的I/O操作做准备

还原数据库状态

现在已经对基本属性,还有数据结构做好了初始化,现在就是还原数据库的状态了,也就是通过RDB或者AOF文件去进行还原。

这篇关于Redis(二十,Java知识总结的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!