前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Redis设计与实现》读书笔记(二十三) ——Redis服务器初始化

《Redis设计与实现》读书笔记(二十三) ——Redis服务器初始化

作者头像
用户1327360
发布2018-03-07 16:09:14
8150
发布2018-03-07 16:09:14
举报
文章被收录于专栏:决胜机器学习决胜机器学习

《Redis设计与实现》读书笔记(二十三) ——Redis服务器初始化

(原创内容,转载请注明来源,谢谢)

redis服务器开启时,会先进行初始化,主要有五个步骤,如下:

1、初始化状态结构

首先,会创建一个structredisServer实例变量,存储服务器的状态。

接着,redis初始化服务器,会执行一次redis.c/initServerConfig函数,主要工作是设置服务器运行ID、默认运行频率、默认配置文件路径、运行架构、默认端口号、RDB条件、AOF条件、LRU时钟、创建命令表。

初始化状态结构,都是简单的结构,后续的数据库、共享对象、慢查询日志、Lua环境等,都是后面才创建的。

2、载入配置选项

在启动redis服务器时,可以通过参数指定配置文件、端口号等。redis会载入这些配置,并且和默认不同的时候,会覆盖默认的配置。

例如输入redis-server –port5000,则会先创建端口基于6379的,再在这一步修改端口号为5000。

在加载用户配置的文件,如果有定义新的结果,则使用新结果,否则就使用默认值。

3、初始化服务器数据结构

1)创建数据结构

在第一步,只创建了一个命令表,在此步骤则会创建其他数据结构,

包括:

代码语言:javascript
复制
server.client    //链表,用于存储普通客户端,每个节点是一个redisClient结构;
server.db        //链表,保存所有的数据库;
server.pubsub_channels//链表,保存频道订阅信息;server.pubsub_patterns链表,保存模式订阅信息。
server.lua       //用于执行lua脚本的环境。
server.showlog   //用于保存慢查询。

服务器会为上述结构分配内存空间。在此步骤才创建数据结构,是因为如果第一步创建,而第二步加载用户自定义配置的时候,有可能会修改到某些内容,则还需要重写。而命令表由于是固定的,因此可以放到第一步创建。

2)其他设置操作

除了创建数据结构,还会进行一些重要的设置。

包括:

为服务器设置进程信号处理器。

创建共享对象,包括整数1~10000的字符串对象,“OK”、“ERR”回复的字符串对象等,用于避免反复创建相同对象。

打开服务器监听端口,为监听的套接字添加相应的应答事件,等待服务器正式运行时接收客户端的连接。

为serverCron函数创建时间事件,等待服务器正式执行serverCron。

如果AOF持久化开启,则打开aof文件,如果不存在则创建aof文件。

初始化服务器后台I/O模块(bio),为将来的I/O做好准备。

4、还原数据库状态

如果开启aof,则载入aof文件;如果没有开启aof,则载入rdb文件。

载入完成后,在日志中打印载入的耗时。

5、执行事件循环

初始化最后一步,服务器将打印连接成功的日志。并且开始事件循环,初始化正式完成,可以开始处理客户端的请求。

redis服务器相关内容总结:

1、命令请求发送主要步骤——客户端命令发给服务器;服务器解析命令并存储在客户端的结构体相应属性;服务器检查是否具备执行条件,检查完毕后执行,执行后进行执行后的后续工作;将执行结果回复客户端。

2、serverCron函数每100毫秒执行1次,主要更新服务器状态、管理客户端、管理数据库、执行持久化,保证redis服务器正常提供服务。

3、服务器启动到接收客户端命令,主要步骤——初始化服务器状态;载入用户自定义配置;创建服务器用到的数据结构;还原数据库状态;执行事件循环,开始提供服务。

——written by linhxx 2017.09.09

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-09-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 决胜机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档