Redis是基于Reactor模式开发的网络事件处理器,这个处理器是单线程的,所

以redis是单线程的。


为什么它是单线程还那么快呢?

主要有以下几个原因:


一、纯内存操作

由于Redis是纯内存操作,相比于磁盘来说,内存就快得多,这个是Redis快的主要

原因。


二、多路复用I/O机制(NIO)


Redis采用的是多路复用非阻塞IO机制,即NIO。这允许Redis同时处理多个网络

连接和I/O流,提高了吞吐量。非阻塞I/O使得Redis能够高效地处理大量的客户端

连接和数据读写操作,而不会因为过多的I/O操作导致性能下降或线程阻塞。


三、单线程避免上下文切换


单线程反而没有了多线程上下文切换带来的损耗,已经资源竞争带来的复杂性。上

下文切换会消耗CPU资源并降低性能,而竞争条件可能导致数据不一致和性能下降


四、简单的数据结构


Redis的数据结构相对简单,这使得数据在内存中的访问更加连续和一致,有利于

充分利用CPU缓存,减少缓存失效的开销。


最后,值得注意的是Redis6.0引入了多线程。在Redis6.0之前,Redis>Redis6.0引入了多线程。在Redis6.0之前,Redis Server端处

理接受到客户端请求时,从Socket连接建立到指令的读取、解析、执行、写回都

是由一个线程来处理。这种方式在客户端请求比较多的情况下,单个线程的网络处

理效率较慢,导致客户端的请求处理效率较低。

Redis其实主要分成两个模块:网络IO处理模块和命令执行模块。引入多线程是为

了解决网络I/O模块效率问题,利用多核CPU的优势,提升网络I/O处理性能。而

命令执行模块还是使用单线程,从而继续保证了命令执行的原子性。

#app { color: rgba(127, 255, 170, 1) }

Redis单线程的更多相关文章

  1. Redis单线程原理

    redis是以socket方式通信,socket服务端可同时接受多个客户端请求连接,也就是说,redis服务同时面对多个redis客户端连接请求,而redis服务本身是单线程运行. 假设,现在有A,B ...

  2. 为什么 redis 单线程却能支撑高并发

    redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发? 这个是问 redis 的时候,最基本的问题吧,redis 最基本的一个内部原理 ...

  3. 理解Redis单线程运行模式

    本文首发于:https://mp.weixin.qq.com/s/je4nqCIq6ARhSV2V5Ymmtg 微信公众号:后端技术指南针 0.概述 通过本文将了解到以下内容: Redis服务器采用单 ...

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

    作者:中华石杉 面试题 redis 和 memcached 有什么区别?redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发? 面试官心理分析 这个是问 redis 的时候,最基本的 ...

  5. Redis 单线程却能支撑高并发 - 简书 https://www.jianshu.com/p/2d293482f272

    小结: 1.在 I/O 多路复用模型中,最重要的函数调用就是 select,该方法的能够同时监控多个文件描述符的可读可写情况:2.Redis 服务采用 Reactor 的方式来实现文件事件处理器(每一 ...

  6. redis 单线程的理解

    单线程模型 Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程.其中执行命令阶段,由于Redis是单线程来处理命令的,所有每一条到达服务端的命令不会立刻执行,所有的命令都会 ...

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

    redis 和 memcached 有啥区别? redis 支持复杂的数据结构 redis 相比 memcached 来说,拥有更多的数据结构,能支持更丰富的数据操作.如果需要缓存能够支持更复杂的结构 ...

  8. 聊聊redis单线程为什么能做到高性能和io多路复用到底是个什么鬼

    1:io多路复用epoll  io多路复用简单来说就是一个线程处理多个网络请求 我们知道epoll in 的事件触发是可读了,这个比较好理解,比如一个连接过来,或者一个数据发送过来了,那么in事件就触 ...

  9. 【Redis破障之路】三:Redis单线程架构

    众所周知,Redis是一个单线程架构的NoSQL数据库,但是是单线程模型的Redis为什么性能如此之高?这就是我们接下来要探究学习的内容. 1.Redis的单线程架构 1.1.Redis单线程简介 首 ...

  10. redis单线程为什么速度那么快?

    1.redis是存储在内存上的,读写的话不会受到硬盘 I/O 速度的限制 如图: (1).硬盘数据库的工作模式: (2).内存数据库的工作模式 2.数据结构简单,对数据操作也简单 3.多路IO复用模型 ...

随机推荐

  1. c# 优化代码的一些规则——用委托表示回调[五]

    前言 委托为什么可以作为回调? 因为委托可以作为方法的参数. 正文 通过委托,是一种定义类型安全回调. 记得第一个接触委托的时候,是老师讲的,后来真正用的是完成学期项目,一个winform,委托作为事 ...

  2. 力扣601(MySQL)-体育馆的人的流量(困难)

    题目: 表:Stadium 编写一个 SQL 查询以找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录. 返回按 visit_date 升序排列 的结果表. 查询结果格式如下所示 示例 ...

  3. 力扣54(java)-螺旋矩阵(中等)

    题目: 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例 1: 提示: m == matrix.lengthn == matrix[i].leng ...

  4. 力扣205(java)-同构字符串(简单)

    题目: 给定两个字符串 s 和 t ,判断它们是否是同构的. 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的. 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序 ...

  5. 用积木讲运维,这样的IT人太会了

    简介: 日志服务SLS提供数据采集.加工.分析.告警可视化与投递功能,为AIOps.大数据分析.运营服务.大数据安全等场景提供支撑,并能以搭积木的方式适配各类运维场景,辅助企业的IT决策.近日,日志服 ...

  6. 客户端单元测试实践——C++篇

    简介: 我们团队在手淘中主要负责BehaviX模块,代码主要是一些逻辑功能,很少涉及到UI,为了减少双端不一致问题.提高性能,我们采用了将核心代码C++化的策略.由于团队项目偏底层,测试同学难以完全覆 ...

  7. 进一步释放技术红利,阿里云推出全新内存增强型实例re6,性能提升30%

    5月7日,国内最大云计算厂商阿里云宣布推出全新一代内存增强型实例,提供1:14.8超大内存比内存容量,满足内存型数据库如SAP HANA.Redis等应用,充分释放技术红利,帮助线下企业快速上云,完成 ...

  8. [FE] Canvas 转图片并下载的方式

    先获取 canvas 节点,使用 toDataURL 转为 image 数据,最后使用 a 链接下载. // Trans to image const canvas = document.getEle ...

  9. UWP WinRT 使用系统自带的分词库对字符串文本进行分词

    本文将和大家介绍在 UWP 应用,或其他能接入 WinRT 的应用里,使用系统自带的分词库,对中文.英文等等自然语言的字符串文本进行分词 开始之前需要说明的是,现在不仅仅 UWP 应用,其他的 UI ...

  10. 6.Ingress 七层负载

    官方文档:https://kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/题目: 设置配置环境: [candidate@no ...