`
zhaomengsen
  • 浏览: 202602 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

Redis服务器的启动过程分析

阅读更多
转载于:http://www.itxuexiwang.com/a/shujukujishu/redis/2016/0216/127.html?1455808771

本文将通过分析代码来介绍Redis的启动过程,通过查看Redis 的启动脚本,得知Redis的启动时从Redis.c的main方法开始的。Redis启动可以分为以下几个步骤:

1.初始化Redis服务器全局配置
2.重置服务器Save参数(具体下文详解)和加载配置文件
3.初始化服务器
4.加载数据库
5.开始网络监听

一,初始化Redis服务器全局配置。这一步骤主要是主要是根据Redis.h中设置的Static值来初始化Redis服务器配置,这里设置是Redis服务器的默认配置。如:

·TCP Port,Redis Client的缺省Timeout;
·Redis缺省的数据库数目;
·Redis Append 持久化方式的参数设置;
·Redis的所支持的各种数据结构的缺省值的设置;
·Redis内存Swap相关设置;
·Redis Master & Slave相关的配置;
·Redis Command Table初始化。

二,加载配置文件:

这一步是通过读取的配置文件来对Redis服务器进行设置,将会覆盖上一步的某些缺省设置。打开下载下来的Redis源代码,我们可以看到其根目录下有一个默认的配置文件redis.conf。需要注意的是,如果在启动Redis的时候没有指定配置文件,则Redis服务器在启动的时候是不会加载这个默认的配置文件进行配置的。而且这个默认的配置文件和第一步中得全局默认缺省配置不尽相同,比如针对Redis的Append模式的数据保存策略的配置,redis.conf里面的设置是:

save 900 1 -------15分钟内一次更新
save 300 10 ------5分钟内10次更新
save 60 10000 ---1分钟内10000次更新。

而上一步里面的默认缺省配置确实:

save 60*60 1 -------一个小时内1次更新
save 300 100 ------5分钟内100次更新
save 60 10000 ---1分钟内10000次更新。

因此我们在启动Redis的时候如果默认配置不能满足要求,则需要指明配置文件进行配置。

三,初始化服务器:

初始化服务器是在initServer()方法中完成的,次方法利用上两步设置的参数进一步初始化服务器:

·创建用来维护clients和slaves的list#p#分页标题#e#
·创建共享对象。redisObject这个struct里有个变量叫做refcount,这个变量就是用来实现共享的。Redis的对象目前Redis只支持共享StringObject。Redis的共享对象有两大类比:第一类:Redis server的各种操作需要经常用到的各类对象,如:Redis Command的分隔符 "rn",用于Redis command的reply的"+OKrn"或者"-ERRrn"等对象,因为在Redis的各种操作这类对象要被频繁使用,所以就在启动Redis的时候创建好,然后共用这些对象,减少时间成本和空间成本;第二,类的共享对象就是对应于数字的StringObject,如:Set "olylakers1" 1234; Set "olylakes2" 1234;在Redis内部,"olylakers1"和"olylakers2"这两个key都指向由数字1234转化的StringObject。这样在海量数据和特定存储内容下,可以节省大量的内存空间。可用通过REDIS_SHARED_INTEGERS这个参数来指定Redis启动的时候创建多少个第二类共享对象,默认的参数是10000,即创建的StrongObject个取值范围是0-9999之间。

·创建Pub/Sub通道
·初始化网络监听EventLoop的相关内容,如eventLoop,timeEvent,fileEvent等
·如果开启了VM,则初始化虚拟内存相关的IO/Thread

四,加载数据:

根据配置的不同,Redis加载数据的源也不一样,如果在配置文件里设置了appendonly  yes(默认是no),那么就从appendfile加载数据,反之则从RedisDb加载数据

·从appendfile加载数据:我们先来看一下appendfile的内容是什么。下面的一条记录摘取自appendfile:SET $9 olylakers $3 oly。很显,appendfile保存的就是redis server接收到的各种命令,那么从appendfile加载数据就是redis server从appenfile里面读取这些命令的记录,然后重新把这些命令执行一遍即可。需要注意的是,如果开启了VM,那么在从appendfile加载数据的时候可能要涉及swap操作。
·从redisdb加载数据:如果没有开启appendonly,那么则需要从db file加载数据到内存,其过程是:
1.通过处理select命令,选择DB
2.然后从db file读取key和value
3.检查key是否过期,如果过期则跳过这个key,如果不过期,则把数据Add到对应的db的dict中
4.如果开启了VM,则从db file中load数据,也可能涉及到swap操作

五,开始网络监听:

Redis的网络监听没有采用libevent等,而是自己实现了一套简单的机遇event驱动的API,具体见ae.c。

分享到:
评论

相关推荐

    windows版本redis5 附带快速启动脚本

    4. 客户端连接:你可以使用内置的`redis-cli.exe`命令行客户端连接到本地Redis服务器,或者使用其他支持Redis协议的客户端工具。 5. 监控与管理:Redis提供了`INFO`命令来查看服务器状态,同时可以通过`redis-cli`的...

    redis-3.0.7-免编译

    3. `redis.conf`:默认配置文件,包含了Redis服务器启动时的参数设置,如端口号、数据文件路径、内存限制等。用户可以根据需求修改此文件。 4. `README`:通常会包含版本信息、使用指南、注意事项等,是了解如何启动...

    redis源码分析

    服务器启动时,会加载配置文件,初始化网络事件处理器(epoll或kqueue),并监听客户端连接。源码中的`server.c`和`networking.c`是了解这一过程的重要部分。 三、命令处理 Redis通过命令表(`server.commands`)...

    Redis架构设计分析

    本文将从Redis的启动流程入手,逐步分析其内部结构与工作原理,并探讨Redis的两种数据持久化方案——RDB和AOF。 #### 二、Redis启动流程 Redis的启动流程主要包含以下几个步骤: 1. **初始化server变量**:在此...

    redis服务端安装包

    4. **启动Redis**:在安装完成后,通过执行`redis-server /path/to/redis.conf`启动Redis服务器。默认情况下,Redis会在6379端口监听。 5. **测试连接**:在终端中,使用`redis-cli`(Redis命令行客户端)连接到...

    redis 免安装 redis客户端 redis-desktop-manager-0.8.8.384

    Redis 是一个高性能的键值数据库,它以键值对的形式存储数据,广泛应用于缓存、消息中间件、实时分析等领域。在 Windows 环境下,通常需要通过安装过程来设置 Redis 服务,但这里提供的资源是“redis 免安装”,意味...

    redis做mysql缓存服务器(公司内部培训资料)

    Redis不仅能够作为一个简单的缓存系统,还能作为消息队列中间件、实时数据分析平台等多种角色,在某些场景下可以很好地补充关系型数据库的功能。Redis支持多种编程语言的客户端,包括但不限于Java、C/C++ (如hiredis...

    redis图形化工具安装包.zip

    安装完成后,按照软件提供的指南启动工具,输入Redis服务器的相关信息,即可开始享受便捷的图形化管理体验。 总的来说,"redis图形化工具安装包.zip"为Windows用户提供了一个直观、高效的Redis管理解决方案,使得...

    redis可视化连接工具

    2. 连接配置:启动软件,创建新的连接,填写Redis服务器的IP地址、端口号,如果设置了密码则输入,选择连接协议(默认TCP)。 3. 测试连接:点击“测试”按钮验证配置是否正确,如果连接成功,可以继续下一步。 4....

    redis数据库可视化工具

    5. **其他功能**:高级的 Redis 可视化工具还可能提供图表分析、报警设置、导入导出数据等功能,帮助你更好地管理 Redis 集群和单个实例。 请注意,这里提到的 `redis-unstable` 文件可能是 Redis 的不稳定版本源...

    redis desktop manager 0.93 for mac

    4. **多实例管理**:用户可以在同一界面下管理多个Redis服务器实例,切换方便。 5. **命令行工具集成**:RDM集成了Redis命令行工具,用户可以直接在界面上执行各种Redis命令。 6. **可视化图表**:提供键的统计信息...

    redis 桌面版客户端

    "Redis 桌面版客户端"是专为方便开发者与管理员在Windows操作系统上交互操作Redis服务器而设计的图形化工具。该版本号为0.9.9.1218的桌面客户端提供了更为直观和便捷的界面,使得管理和操作Redis数据库变得更加简单...

    tomcat-redis依赖jar包

    - 防火墙配置:确保只允许必要的IP地址访问Redis服务器。 - 密码保护:启用Redis的认证机制,防止未授权访问。 - 避免暴露在公网:Redis默认不推荐直接暴露在公网上,建议通过内网或代理服务器访问。 6. **监控...

    redis_Test.rar

    hiredis是一个专门为Redis设计的C语言客户端库,它简化了与Redis服务器通信的过程,提供了异步和同步两种API。在Windows平台上使用hiredis,可能需要一些额外的步骤,因为hiredis通常是在Unix-like系统上开发和测试...

    redis 可视化工具以及免安装redis 绿色版

    本文将深入探讨Redis的可视化工具及其免安装绿色版的使用,帮助你更好地管理和操作Redis服务器。 首先,了解Redis可视化工具的重要性。在日常开发和运维中,直观地查看和管理Redis的数据结构、键值对以及性能指标是...

    redis magento

    例如,如果出现“连接超时”错误,可能是 Redis 服务器未启动,或者 Magento 的配置中填写的 Redis 服务器地址或端口有误。此时,需要检查 Redis 服务是否正常运行,并确保 Magento 的配置文件(如 `app/etc/local....

Global site tag (gtag.js) - Google Analytics