美文网首页程序员
Redis 单线程模型详解

Redis 单线程模型详解

作者: ExecutorofZero | 来源:发表于2020-12-28 13:41 被阅读0次

Redis 基于 Reactor 模式来设计开发了自己的一套高效的事件处理模型 (Netty 的线程模型也基于 Reactor 模式,Reactor 模式不愧是高性能 IO 的基石),这套事件处理模型对应的是 Redis 中的文件事件处理器(file event handler)。由于文件事件处理器(file event handler)是单线程方式运行的,所以我们一般都说 Redis 是单线程模型。

既然是单线程,那怎么监听大量的客户端连接呢?

Redis 通过IO 多路复用程序 来监听来自客户端的大量连接(或者说是监听多个 socket),它会将感兴趣的事件及类型(读、写)注册到内核中并监听每个事件是否发生。

这样的好处非常明显: I/O 多路复用技术的使用让 Redis 不需要额外创建多余的线程来监听客户端的大量连接,降低了资源的消耗(和 NIO 中的 Selector 组件很像)。

另外, Redis 服务器是一个事件驱动程序,服务器需要处理两类事件: 1. 文件事件; 2. 时间事件。

时间事件不需要多花时间了解,我们接触最多的还是 文件事件(客户端进行读取写入等操作,涉及一系列网络通信)。

《Redis 设计与实现》有一段话是如是介绍文件事件的,我觉得写得挺不错。

Redis 基于 Reactor 模式开发了自己的网络事件处理器:这个处理器被称为文件事件处理器(file event handler)。文件事件处理器使用 I/O 多路复用(multiplexing)程序来同时监听多个套接字,并根据 套接字目前执行的任务来为套接字关联不同的事件处理器。

当被监听的套接字准备好执行连接应答(accept)、读取(read)、写入(write)、关 闭(close)等操作时,与操作相对应的文件事件就会产生,这时文件事件处理器就会调用套接字之前关联好的事件处理器来处理这些事件。

虽然文件事件处理器以单线程方式运行,但通过使用 I/O 多路复用程序来监听多个套接字,文件事件处理器既实现了高性能的网络通信模型,又可以很好地与 Redis 服务器中其他同样以单线程方式运行的模块进行对接,这保持了 Redis 内部单线程设计的简单性。

可以看出,文件事件处理器(file event handler)主要是包含 4 个部分:

· 多个 socket(客户端连接)
· IO 多路复用程序(支持多个客户端连接的关键)
· 文件事件分派器(将 socket 关联到相应的事件处理器)
· 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)


image.png

相关文章

  • Redis学习之旅~原理篇

    内容依旧来自 核心原理 线程IO模型 单线程非阻塞IO redis是单线程模型。redis的...

  • java面试宝典 redis和分布式锁

    redis 是基于key-value的内存高速缓存数据库 redis 是单线程模型 redis 是单线程模型为什么...

  • Redis 单线程模型详解

    Redis 基于 Reactor 模式来设计开发了自己的一套高效的事件处理模型 (Netty 的线程模型也基于 R...

  • Redis 到底是单线程还是多线程?我要吊打面试官

    1、Redis 单线程到底指什么? 没错,大家所熟知的 Redis 确实是单线程模型,指的是执行 Redis 命令...

  • Redis高级应用总结

    Redis的线程模型 Redis是单进程单线程的,但是使用的是单线程非阻塞的多路IO复用的模型。多线程模型会导致线...

  • Redis单线程原理

    redis单线程模型很多人都知道的一个点,但是redis为什么采用单线程,很多人都不是很清楚,同时redis单线程...

  • redis-io-nio

    redis-io模型 单线程的程序有哪些? nginx node.js redis 单线程为什么快 全是内存运...

  • Redis线程模型

    彻底搞懂Redis的线程模型了解redis的单线程模型工作原理 文件事件处理器 Redis基于Reactor模式开...

  • Redis 异步化组件模型

    Redis 异步化组件模型 Redis 线程体系 Redis可以说是基于单线程模型的,因为对于客户端的所有读写请求...

  • Redis汇总

    1. redis 数据类型 string, list, hash ,set,zset 2. redis 单线程模型...

网友评论

    本文标题:Redis 单线程模型详解

    本文链接:https://www.haomeiwen.com/subject/chpmnktx.html