`
lingqi1818
  • 浏览: 253985 次
  • 性别: 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内存模型介绍 #### 一、Redis简介与数据类型 **Redis** 是一款高性能的键值对存储系统,它采用内存作为主要存储介质,并提供了丰富的数据结构支持,包括字符串(Strings)、哈希(Hashes)、列表(Lists)、...

    java redis服务器java版redis 服务.zip

    Redis是java版本的redis服务器命令仅支持服务连接与五大基本类型相关的命令存储仅支持AOF日志多路复用支持epoll,kqueue,select默认优先级由高到低,同时支持本地和单路复用强烈推荐使用单路选择线程模型执行1,...

    关于Redis网络模型的源码详析

    在初始化服务器时,Redis会创建一个`eventLoop`对象,这是处理事件的核心结构。`eventLoop`包含了已注册的文件事件数组、已就绪的文件事件数组以及时间事件链表。 `aeCreateEventLoop`方法用于初始化`eventLoop`,...

    redis服务器,直接服务打开

    "redis服务器,直接服务打开"这个标题暗示我们将讨论如何启动和管理Redis服务器。 **Redis的基本概念:** 1. **键值对(Key-Value)存储**:Redis的核心是键值对模型,其中键是唯一的字符串,值可以是多种数据类型...

    redis缓存服务器

    Redis 以其内存高速读写性能、丰富的数据类型、持久化选项以及网络事件处理模型而闻名。 1. **Redis 数据结构**: - 字符串(String):基础数据类型,可存储字符串、数字等。 - 哈希(Hash):用于存储键值对的...

    Redis线程模型,分布式一致性1

    Redis线程模型和分布式一致性 Redis是一个基于内存的高性能NoSQL数据库,具有高效、低延迟和高可扩展性等特点。为了实现高性能和高可用性,Redis采用了多线程模型和分布式架构。 Redis线程模型 Redis的线程模型是...

    20_来聊聊redis的线程模型吧?为啥单线程还能有很高的效率?.zip

    这种模型允许Redis服务器监听并处理多个客户端连接的请求,而无需为每个连接创建一个独立的线程。当有新的客户端连接请求或数据到达时,操作系统会通过Epoll或Kqueue将这些事件通知给Redis,然后Redis再进行相应的...

    Redis源代码分析.pdf

    Redis源代码分析文档对Redis的源代码进行了深入分析,涵盖了Redis的基本功能、服务器模型、事件处理、套接字操作、客户端连接、命令处理、虚拟内存、数据读取过程、数据交换策略、备份机制、主从同步等方面。...

    redis源码分析

    Redis服务器的核心是`server`结构体,包含了服务器的状态信息,如客户端列表、数据库、命令字典等。服务器启动时,会加载配置文件,初始化网络事件处理器(epoll或kqueue),并监听客户端连接。源码中的`server.c`和...

    cpp-xredisserverC开发的Redis服务器框架库

    4. **事件驱动编程**:Redis服务器通常采用事件驱动模型处理客户端请求,例如使用epoll或kqueue等机制。xredis-server可能内置了这样的机制,以高效地处理大量并发连接。 5. **多线程与并发控制**:为了处理高并发...

    Go 实现的 Redis 内存分析工具

    6. **命令行界面**:可能提供一个简单的命令行界面供用户输入 Redis 服务器的连接信息和执行分析,需要掌握 Go 的命令行参数解析和 I/O 操作。 7. **错误处理和日志记录**:为了确保工具的健壮性,需要处理各种可能...

    Go-Redcon快速的Redis服务器Go实现

    **Go-Redcon快速的Redis服务器Go实现** 在IT领域,特别是数据库服务中,Redis作为一个高性能的键值存储系统,广泛应用于缓存、消息队列等场景。而Go语言以其高效的并发模型和简洁的语法,成为了构建网络服务的热门...

    redis-7.0.15-win-amd64

    在压缩包中,"bin"目录下通常包含了Redis服务器端(redis-server.exe)和客户端(redis-cli.exe)的可执行文件,以及其他辅助工具,如用于检查数据一致性的redis-check-dump.exe,分析RDB文件的redis-check-aof.exe...

    redis64 for windows

    综上所述,"redis64 for windows"为Windows用户提供了在本地运行Redis服务器的便利,通过配置redis.conf文件和使用相应的exe文件,可以轻松地进行Redis的部署、管理和性能测试。了解并掌握这些知识,将有助于在...

    redis-windows-redis7.0.5.zip

    在Windows环境下运行Redis,通常需要安装一个兼容的二进制版本,这个压缩包可能包含了所有必要的文件,如服务配置、启动脚本、二进制可执行文件等,使得用户能在Windows操作系统上顺利搭建和使用Redis服务器。...

    redis压缩包.rar

    Redis服务器可以在单进程单线程模式下处理高并发请求,由于其非阻塞I/O模型,因此性能表现非常出色。 对于Linux环境的安装,通常我们会采用以下步骤: 1. 下载Redis源代码,解压至指定目录。 2. 使用`make`命令编译...

    Redis5.0 Windows64

    - 引入了流数据结构(Streams):这是Redis 5.0引入的一个核心新特性,提供了一种时间序列数据存储方式,支持多消费者模型,适用于日志记录、时间序列分析等场景。 - 数据持久化改进:RDB(Redis Database Backup...

    redis-windows-7.2.1.zip

    这个压缩包包含了Redis 7.2.1版本的Windows适配版,为Windows用户提供了在本地运行Redis服务器的能力。 Redis的特点主要包括以下几个方面: 1. **高性能**:Redis基于内存操作,数据读写速度非常快,支持多种数据...

Global site tag (gtag.js) - Google Analytics