`
lingqi1818
  • 浏览: 249179 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

redis服务器模型分析

 
阅读更多
redis的服务器程序采用的是单进程,单线程的模型来处理客户端的请求。对读写等事件的响应是通过对epoll函数的包装来做到的。
下图是整个服务器模型原理图。



首先我们来说明下整个服务器初始化的过程:
1.初始化asEventLoop。
2.初始化服务器socket监听,并且绑定acceptTcpHandler事件函数,以应对建立客户端连接的请求。
3.绑定beforesleep函数到eventLoop,并且调用aeMain来启动epoll主循环。
4.主循环响应客户端要求建立连接的请求。
5.主循环读取客户端命令,并执行。
6.如有数据回写则初始化化writeEvent,将数据提交到c-replay队列。主循环需要处理此事件的时候则读取数据写回客户端。


由此可见redis的实际实际处理速度完全依靠主循环的执行效率。假如同时有多个客户端并发访问服务器,则服务器处理能力在一定情况下将会下降,下面用实际的测试过程来说明。

由于我的测试数据是在模拟器下的虚拟机中的出来的,所以没有实际的生产环境参考价值,只是用来说明模型与并发处理能力之间的关系。

先看下客户端连接数分别为1,10,50,横坐标为客户端并发线程数,纵坐标为服务端实际吞吐量大小。



再来看下响应时间



由此可见:
1.当服务端并发连接客户端越多,它的实际吞吐量是呈下降趋势。
2.除去1个连接的时候由于客户端并发线程竞争1个连接资源的开销外,其他情况下,服务端响应客户端时间均比较稳定。

结论:
1.由于服务器采用单进程单线程的模型,服务器实际响应客户请求其实是先来后到的串行模式,只要服务器算法OK,那么单个请求响应时间绝对OK。
2.假如你要提升服务器的并发能力,那么可以采用在单台机器部署多个redis进程的方式。
  • 大小: 72.1 KB
  • 大小: 25.3 KB
  • 大小: 22.9 KB
分享到:
评论
2 楼 lingqi1818 2011-10-31  
agapple 写道
问一下,redis的aeMain函数是不是类似于nio中的selector线程跑?接到event后丢给连接池进行处理

你说的串行是指接受请求的过程把?

是啊。
1 楼 agapple 2011-10-25  
问一下,redis的aeMain函数是不是类似于nio中的selector线程跑?接到event后丢给连接池进行处理

你说的串行是指接受请求的过程把?

相关推荐

    redis网络事件框架的使用

    以下这个程序实现了一个简单的回显服务器,并且每秒钟在控制台输出一句话。它简单地演示了redis网络模块的使用。 这个程序由6个源文件组成,ae.h, ae.c, ae_epoll.c, anet.h, anet.c, main.c组成,main.c由我原创,...

    ANet:基于Redis网络模型的简易网络库,网络模块代码取自Redis原始代码

    网络基于Redis网络模型的简易网络库,网络模块代码取自Redis原始代码。Redis网络模型介绍Redis的网络模型是一个使用IO多路复用,单线程,非阻塞的模型。这个模型的优点在于单线程不用考虑加锁,如果在单核环境上可以...

    Redis中事件驱动模型示例详解

    Redis 服务器通过 socket 实现与客户端(或其他redis服务器)的交互,文件事件就是服务器对 socket 操作的抽象。 Redis 服务器,通过监听这些 socket 产生的文件事件并处理这些事件,实现对客户端调用的响应。 ...

    排队matlab代码-redis-simulink:CSimulinkS功能块的示例,实现了REDIS连接器以与REDIS服务器进行交互

    该模型在无尽的模拟中运行,将命令发送到REDIS服务器,如下所示(打印服务器响应): 命令1)SET EURUSD:last 1.32343 Command 2)SET GBPJPY:last 186.432 Command 3)SET AUDUSD:last 0.71882 命令4)GET ...

    model-metadata-redis-for-phalcon:适配Redis Phalcon的模型元数据

    模型元数据-redis-for-phalcon 适配Redis Phalcon的模型元数据用法 use Phalcon \ Mvc \ Application ;use Iwai \ Phalcon \ Mvc \ Model \ ...选项主持人Redis服务器主机港口Redis服务器端口字首为 Redis 设置 hset

    实现日志服务器采用udp,epoll机制 多进程驱动模型(进程池) 采用redis缓存,NFS持久存储

    redis 实现日志服务器采用udp,epoll机制 多进程驱动模型(进程池) 采用redis缓存,NFS持久存储

    redisStudy.zip

    2.redis线程模型 redis是单线程实现。 3.redis 提供的持久机制 redis 支持rdb和aof两种持久机制,redis4.0后支持混合持久化。rdb是定时的持久机制,宕机有可能会丢失最后一次持久化之后存在数据丢失。aof是基于操作...

    Redis的.net客户端StackExchange.Redis.zip

    缺点在于一些低质量的代码可能导致服务器资源耗尽。不过提供连接池等阻塞和等待的手段是和作者的设计理念相违背的。StackExchange.Redis这里使用管道和多路复用的技术来实现减少连接,这里后续展开再讨论。当作消息...

    redis基础学习笔记

    目 录 一.Redis介绍 3 二.Redis安装及配置 3 ...4.网络IO模型 20 5.内存管理方面 20 6.数据一致性问题 20 7.存储方式及其它方面 20 8.关于不同语言的客户端支持 21 9.关于Redis的一些周边功能 21

    Redis V3.0 中文文档

    第 1 章Redis 介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 第 2 章数据类型初探. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...

    Redis-Source-Code-Analyze:Redis原始阅读和分析(Redis-3.2.5)-redis source code

    这意味着Redis通过一组命令提供对可变数据结构的访问,这些命令是使用带有TCP套接字和简单协议的服务器-客户端模型发送的。 因此,不同的进程可以以共享的方式查询和修改相同的数据结构。 在Redis中实现的数据结构...

    用于服务张量和执行深度学习图的 Redis 模块_C语言_代码_下载

    RedisAI 是一个 Redis 模块,用于执行...要运行它,您需要一个 Redis 服务器(v6.0.0 或更高版本)、模块的共享库及其依赖项。 以下部分描述了如何开始使用 RedisAI。 更多详情、使用方法,请下载后阅读README.md文件

    Redis常用语法命令及使用示例详解

    此外,Redis还提供了许多用于服务器管理和客户端管理的命令,如INFO命令用于获取服务器信息,CLIENT LIST和CLIENT KILL命令用于列出和关闭客户端连接。由于其高性能、丰富的功能和简单的使用方式,Redis已经成为许多...

    redis包,供大家使用

    通过内置的需求管理功能,EnterpriseArchitect可以帮助您使用UML,SysML,BPMN和其他开放标准跟踪从高级规范到分析,设计,实现,测试和维护模型。 1.2全生命周期建模: 业务和IT系统 软件和系统工程 实时和...

    Redis 3.0 中文版 - v1.1.pdf

    第 1 章Redis 介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 第 2 章数据类型初探. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...

    presto-redis:presto-redis 是一个实验性的 redis sql 层

    它启动一个 PrestoDB 服务器并尝试连接到本地主机端口 6379 上的 redis 实例 数据模型将地图视为表,将地图中的对象视为行。 要求 redis collections 包应该安装在本地maven repo [Redis Collection}( ) 用法 使用 ...

    redis:redis源码分析与个人理解

    这意味着Redis通过一组命令提供对可变数据结构的访问,这些命令是使用带有TCP套接字和简单协议的服务器-客户端模型发送的。 因此,不同的进程可以以共享的方式查询和修改相同的数据结构。 在Redis中实现的数据结构...

    基于ssm+shiro+redis+nginx tomcat服务器集群管理项目源码+项目说明.zip

    redis:Nosql数据库,搭配shiro的会话管理功能将session存入redis中,实现tomcat多服务器集群的session共享 nginx:反向代理服务器,用来调度多台tomcat h2:内存数据库,用于测试 开发环境 ==== jdk...

Global site tag (gtag.js) - Google Analytics