redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?
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 单线程却能支撑高并发?相关推荐
- 缓存数据库面试 - redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?
缓存数据库面试 - redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发? 面试题 redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis ...
- redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发?...
这个是问 redis 的时候,最基本的问题吧,redis 最基本的一个内部原理和特点,就是 redis 实际上是个单线程工作模型, 你要是这个都不知道,那后面玩儿 redis 的时候,出了问题岂不是什 ...
- 为什么 Redis 单线程却能支撑高并发?
程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 7 分钟. 最近在看 UNIX 网络编程并研究了一下 Redis 的实现,感觉 Redis 的源代码十分适合阅读和分析,其中 ...
- 阻塞io阻塞io_Redis:RESP协议,阻塞IO 与非阻塞IO,Redis的线程模型
1.Redis 阻塞IO 与非阻塞IO Java在JDK1.4 中引入了NIO ,但是也有很多人在使用阻塞IO,这两种IO有什么区别? 在阻塞模式下,如果你从数据流读取不到指定大小的数据量,IO就会阻 ...
- 【重难点】【Redis 01】为什么使用 Redis、Redis 的线程模型、Redis 的数据类型及其底层数据结构
[重难点][Redis 01]为什么使用 Redis.Redis 的线程模型.Redis 的数据类型及其底层数据结构 文章目录 [重难点][Redis 01]为什么使用 Redis.Redis 的线程 ...
- 简谈Redis的线程模型
Redis线程模型 Redis真的是单线程的吗 ? 为什么说Redis单线程速度这么快? IO多路复用 Redis真的是单线程的吗 ? Redis的单线程主要是指处理网络IO请求和键值对的读写是单线程 ...
- 后端开发【一大波有用知识】Redis的线程模型和异步机制
文章目录 Redis 6.0引入多线程 异步机制 Redis pipeline技术 Redis 事务 ACID特性分析 redis 发布订阅 我们通常说,Redis 是单线程,主要是指 Redis 的 ...
- Redis的线程模型
Redis它是一个单线程的,这一点需要去注意的. 首先我们呢会有一个客户端,这个客户端在我们之前其实使用的是一个redis client 这样的一个工具去连接的redis server. 如果说我们后 ...
- Redis为什么这么快?Redis的线程模型与Redis多线程
一.Redis有多快? Redis是基于内存运行的高性能 K-V 数据库,官方提供的测试报告是单机可以支持约10w/s的QPS 二.Redis为什么这么快? (1)完全基于内存,数据存在内存中,绝大部 ...
最新文章
- 《JavaScript权威指南》笔记(一)
- 将本地的MS SQL Server数据导入到远程服务器上
- EM 期望最大化算法
- cmd静默运行_【已解决】BAT批处理中如何静默执行,在完成后调用MSGBOX?
- POJ1265(Pick定理的应用)
- 软工Hello World!团队第二周博客汇总
- Spring笔记——使用Spring进行面向切面(AOP)编程
- 打印机共享无法正常打印的处理思路
- 国际版Azure搭建Windows多种类型***_一.简介及安装服务
- 深度学习笔记(17) 误差分析(二)
- PHP学习总结(10)——PHP入门篇之自定义网站根目录
- mysql federated engine
- C#第一课--hello world
- Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算
- 下载gradel的链接
- 计算不确定度(C语言-大物实验)-复制即可使用
- matlab怎么学机器人算法,机器人学、机器视觉与控制——MATLAB算法基础
- 复数中欧拉公式与计算机,欧拉公式
- Unity使用脚本模拟Button按下
- 数据结构之B树、B+树、B*树