纯内存访问,所有数据都在内存中,所有的运算都是内存级别的运算,内存响应时间的时间为纳秒级别。因此 redis 进程的 cpu 基本不存在磁盘 I/O 等待时间、内存读写性能问题,CPU 不是 redis 的瓶颈(内存大小和网络I/O 才是 redis 的瓶颈,也就是客户端和服务端之间的网络传输延迟)。

redis 的高性能

  • 纯内存访问,所有数据都在内存中,所有的运算都是内存级别的运算,内存响应时间的时间为纳秒级别。因此 redis 进程的 cpu 基本不存在磁盘 I/O 等待时间、内存读写性能问题,CPU 不是 redis 的瓶颈(内存大小和网络I/O 才是 redis 的瓶颈,也就是客户端和服务端之间的网络传输延迟)
  • 采用单线程模型,单线程实现简单。避免了多线程频繁上下文切换,以及同步机制加锁带来的开销
  • 简单高效的基础数据结构:动态字符串(SDS),链表,字典,跳跃链表,整数集合和压缩列表。然后 redis 在这个基础上去实现用户能操作的对象:字符串,列表,哈希,集合,有序集合等对象
  • reactor 模式的网络事件处理器。它使用了 I/O 多路复用去同时监控多个套接字,这是一种高效的I/O模型。reactor 相关知识可以看下这篇文章 框架篇:见识一下linux高性能网络IO+Reactor模型

为什么使用单线程

采用单线程,避免了不必要的上下文切换和竞争条件;不存在多线程导致的切换而消耗CPU

不用考虑各种锁的问题,不存在加锁和释放锁的的操作,没有因为可能出现的死锁而导致的性能消耗

简单可维护,多线程模式会使得程序的编写更加复杂和麻烦,单线程实现易实现

redis 是单线程系统?

我们常说 redis 单线程是指其网络事件处理模型 reactor 是单线程

如果一次 client 请求会删除几百万 keys 值,那么这条命令可能会导致阻塞。在 redis 4.0 选择引入多线程来实现这一类非阻塞的命令

在 redis6.0 版本正式引入多线程去处理客户端的 I/O 读写响应,而 redis 命令事件的处理还是在主线程单线处理

假如是针对整个 redis 系统,则一直有其他线程去处理异步任务,如 AOF、RDB 的同步

redis I/O模型

redis 处理快,不单单因为它是个单线程纯内存系统,还有它采用了 Reactor 模型,使用 I/O 多路复用来实现对外部请求的处理,减少网络连接、读写等待时间。使其在网络 I/O 操作中能并发处理大量的客户端请求,实现高吞吐率,高并发

redis 的多线程版本I/O模型 6.0

Redis之单线程 Reactor 模型相关推荐

  1. redis为什么选择单线程工作模型

    1.先说一下为什么出现进程,线程 进程:在计算机发明之初就发现,在输入数据时(I/O速度慢),CPU是空闲的,这样就浪费了CPU资源,为了充分利用CPU资源,发明了进程,在输入程序A的数据时,程序B在 ...

  2. java基础巩固-宇宙第一AiYWM:为了维持生计,Redis基础Part6(Redis的应用场景、Redis是单线程的速度还快、Redis线程模型:Reactor模式、事件、发布订阅、管道)~整起

    PART1-1:为什么Redis是单线程的 Redis单线程是指: Redis的网络IO和键值对读写是由一个线程来完成的.这也是 Redis 对外提供键值存储服务的主要流程.Redis的其他功能,比如 ...

  3. 为什么 Redis 是单线程的

    文章目录 3.6 为什么 Redis 是单线程的 3.6.1 Redis的单线程理解 3.6.2 单线程的 Redis 为何高并发快 3.6 为什么 Redis 是单线程的 参考地址:https:// ...

  4. Redis 是单线程的正确理解

    一.为什么Redis是单线程的 1️⃣官方答案 因为 Redis 是基于内存的操作,CPU不是 Redis 的瓶颈.Redis 的瓶颈最有可能是机器内存的大小或者网络带宽.既然单线程容易实现,而且 C ...

  5. Redis是单线程为什么还那么快?

    Redis为什么还那么快 基于内存   Redis完全基于内存,绝大部分请求是纯粹的内存操作,Redis将数据存储在内存中,读写数据的时候不会受到硬盘I/O速度的限制(内存速度为什么比硬盘快?),类似 ...

  6. Reactor模型详解

    文章目录 前言 一.经典的同步阻塞模型 1.下面看传统的BIO代码: 2.client端代码: 3.因此,我们要引出我们今日的主角: reactor 二.单reactor单线程设计 代码示例 三.单r ...

  7. Netty线程模型 Reactor模型

    线程模型 线程模型有传统阻塞I/O服务器模型和Reactor模型(网络主流模型) 根据Reactor的数量和处理资源池线程的数量不同,有3种典型的实现: 单Reactor单线程 单Reactor多线程 ...

  8. Reactor模型 介绍

    以下内容转载自 https://www.toutiao.com/i6808729994718609934/ 要无障碍阅读本文,需要对NIO有一个大概的了解,起码要可以写一个NIO的Hello Worl ...

  9. 了解redis的单线程模型工作原理?一篇文章就够了

    1.首先redis是单线程的,为什么redis会是单线程的呢? 从redis的性能上进行考虑,单线程避免了上下文频繁切换问题,效率高: 从redis的内部结构设计原理进行考虑,redis是基于Reac ...

最新文章

  1. linux下batik-rasterizer.jar生成图片中文乱码
  2. 测试php连接mysql
  3. Yii的errorLog
  4. 看新排美国话剧《哗变》
  5. vue拦截器实现统一token,并兼容IE9验证
  6. pku acm 2140 Herd Sums http://acm.pku.edu.cn/JudgeOnline/problem?id=2140
  7. Codeforces Round #643 (Div. 2)(A, B, C, D, E)
  8. uva 12442 . Forwarding Emails
  9. 流行趋势-立体感和艺术剪纸风海报美妆设计
  10. FLASH BUILDER 清除图片缓存
  11. 牛逼!这么问 OutOfMemoryError 能让我懵逼!
  12. QLineEdit用正则表达式限制double类型输入,double转为9位小数的字符串
  13. 小白学VUE——实现抖音时钟(CDN方式)
  14. unity 给图片边缘_Unity 截图选择框,中间全透明,边缘半透明
  15. 移动营销必备:App自动绑定的五大场景赋能
  16. vue项目之页面底部出现白边及空白区域错误记录
  17. ecshop4.0php,ECSHOP安装教程【ECSHOP4.0安装教程】图解ECSHOP4.0安装教程流程和步骤-ECSHOP教程网...
  18. 优化设计——多目标函数优化(降维/主目标法、线性加权法、理想点法)——MATLAB编程
  19. adobe xd 白屏闪退 终极拯救方法
  20. 编程语言试验之Antlr4+JavaScript实现圈4

热门文章

  1. 怎么向女朋友解释什么叫区块链?
  2. 项目性能优化(实现页面静态化1)
  3. Linux之链接命令
  4. OCR光学字符识别方法汇总(附开源代码)
  5. 17个Python的骚操作,你都OK吗?
  6. 干货 | 抖音漫画效果解密
  7. Plan9操作系统基本概念
  8. 在为时已晚前 阻止物联网安全威胁和攻击
  9. windows 2012 exchange server 2013 搭建
  10. SHELL-命令解释程序