redis 的线程模型

redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列中,事件分派器根据 socket 上的事件类型来选择对应的事件处理器进行处理。

文件事件处理器的结构包含 4 个部分:

  • 多个 socket
  • IO 多路复用程序
  • 文件事件分派器
  • 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)

多个 socket 可能会并发产生不同的操作,每个操作对应不同的文件事件,但是 IO 多路复用程序会监听多个 socket,会将产生事件的 socket 放入队列中排队,事件分派器每次从队列中取出一个 socket,根据 socket 的事件类型交给对应的事件处理器进行处理。

要明白,通信是通过 socket 来完成的,不懂的同学可以先去看一看 socket 网络编程。

为啥 redis 单线程模型也能效率这么高?

  • 纯内存操作
  • 核心是基于非阻塞的 IO 多路复用机制
  • 单线程反而避免了多线程的频繁上下文切换问题

redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?相关推荐

  1. 缓存数据库面试 - redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?

    缓存数据库面试 - redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发? 面试题 redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis ...

  2. redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?...

    这个是问 redis 的时候,最基本的问题吧,redis 最基本的一个内部原理和特点,就是 redis 实际上是个单线程工作模型, 你要是这个都不知道,那后面玩儿 redis 的时候,出了问题岂不是什 ...

  3. 为什么 Redis 单线程却能支撑高并发?

    程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 7 分钟. 最近在看 UNIX 网络编程并研究了一下 Redis 的实现,感觉 Redis 的源代码十分适合阅读和分析,其中 ...

  4. 阻塞io阻塞io_Redis:RESP协议,阻塞IO 与非阻塞IO,Redis的线程模型

    1.Redis 阻塞IO 与非阻塞IO Java在JDK1.4 中引入了NIO ,但是也有很多人在使用阻塞IO,这两种IO有什么区别? 在阻塞模式下,如果你从数据流读取不到指定大小的数据量,IO就会阻 ...

  5. 【重难点】【Redis 01】为什么使用 Redis、Redis 的线程模型、Redis 的数据类型及其底层数据结构

    [重难点][Redis 01]为什么使用 Redis.Redis 的线程模型.Redis 的数据类型及其底层数据结构 文章目录 [重难点][Redis 01]为什么使用 Redis.Redis 的线程 ...

  6. 简谈Redis的线程模型

    Redis线程模型 Redis真的是单线程的吗 ? 为什么说Redis单线程速度这么快? IO多路复用 Redis真的是单线程的吗 ? Redis的单线程主要是指处理网络IO请求和键值对的读写是单线程 ...

  7. 后端开发【一大波有用知识】Redis的线程模型和异步机制

    文章目录 Redis 6.0引入多线程 异步机制 Redis pipeline技术 Redis 事务 ACID特性分析 redis 发布订阅 我们通常说,Redis 是单线程,主要是指 Redis 的 ...

  8. Redis的线程模型

    Redis它是一个单线程的,这一点需要去注意的. 首先我们呢会有一个客户端,这个客户端在我们之前其实使用的是一个redis client 这样的一个工具去连接的redis server. 如果说我们后 ...

  9. Redis为什么这么快?Redis的线程模型与Redis多线程

    一.Redis有多快? Redis是基于内存运行的高性能 K-V 数据库,官方提供的测试报告是单机可以支持约10w/s的QPS 二.Redis为什么这么快? (1)完全基于内存,数据存在内存中,绝大部 ...

最新文章

  1. 《JavaScript权威指南》笔记(一)
  2. 将本地的MS SQL Server数据导入到远程服务器上
  3. EM 期望最大化算法
  4. cmd静默运行_【已解决】BAT批处理中如何静默执行,在完成后调用MSGBOX?
  5. POJ1265(Pick定理的应用)
  6. 软工Hello World!团队第二周博客汇总
  7. Spring笔记——使用Spring进行面向切面(AOP)编程
  8. 打印机共享无法正常打印的处理思路
  9. 国际版Azure搭建Windows多种类型***_一.简介及安装服务
  10. 深度学习笔记(17) 误差分析(二)
  11. PHP学习总结(10)——PHP入门篇之自定义网站根目录
  12. mysql federated engine
  13. C#第一课--hello world
  14. Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算
  15. 下载gradel的链接
  16. 计算不确定度(C语言-大物实验)-复制即可使用
  17. matlab怎么学机器人算法,机器人学、机器视觉与控制——MATLAB算法基础
  18. 复数中欧拉公式与计算机,欧拉公式
  19. Unity使用脚本模拟Button按下
  20. 数据结构之B树、B+树、B*树

热门文章

  1. Stars HDU 1541
  2. Vb Shell 打开程序 等待运行完毕后再继续
  3. P3796 【模板】AC自动机(加强版)
  4. 在centos安装redis
  5. bootstrap bootstrapTable 隐藏列
  6. html、css 【珍藏】
  7. Apache Spark源码走读之3 -- Task运行期之函数调用关系分析
  8. 使用命令行建立Zend Framework项目
  9. 【Spring学习】spring定时任务的实现方式
  10. YYCache 源码学习(二):YYDiskCache