1、Redis单线程

在一开始的时候,Redis采用的是单线程模型,因为Redis是一个基于内存的数据库,将所有的数据放入内存,所以使用单线程的操作效率是最高的,多线程会上下文切换消耗大量时间,对于内存系统来说,单线程才能产生更高的效率。但是单线程不意味着整个Redis就一个线程,Redis其他模块还有各自的线程。

Redis基于Reactor模式开发了网络事件处理器,这个处理器被称为文件事件处理器。它的组成结构为4部分:多个套接字、IO多路复用程序、文件事件分派器、事件处理器。因为文件事件分派器队列的消费是单线程的,所以Redis才叫单线程模型。

使用I/O多路复用机制同时监听多个客户端,在单线程模式下,即使网络处理很多,因为存在I/O多路复用,依然可以在高速的内存处理下得到忽略。

2、Redis为什么引入多线程

Redis基于内存操作,CPU并不是性能瓶颈,Redis的瓶颈是根据机器的内存和网络带宽。在6.0的版本中引入了多线程。

这个I/O threads 指的是网络I/O处理方面使用了多线程,如网络数据的读写和协议解析等,这是因为读写网络的read/write在Redis执行期间占用了大部分CPU时间,如果把这部分模块使用多线程方式实现会对性能带来极大地提升。但是Redis执行命令的核心模块还是单线程的。

需要注意的是在 Redis6.0 中,多线程机制默认是关闭的,需要在 redis.conf 中完成以下两个设置才能启用多线程。
(1)设置 io-thread-do-reads 配置项为 yes,表示启用多线程。

io-threads-do-reads yes

(2)设置线程个数。⼀般来说,线程个数要小于 Redis 实例所在机器的 CPU 核数, 例如,对于⼀个 8 核的机器来说,Redis 官⽅建议配置 6 个 IO 线程。

io-threads 6

来具体看一下在 Redis6.0 中,主线程和 IO 线程是如何协作完成请求处理的。

redis是单线程还是多线程?相关推荐

  1. Redis 属于单线程还是多线程?不同的版本有什么区别?

    Redis 是普及率最高的技术之一,同时也是面试中必问的一个技术模块,所以从今天开始我们将从最热门的 Redis 面试题入手,更加深入的学习和了解一下 Redis. 我们本文的面试题是 Redis 属 ...

  2. Redis 是单线程还是多线程

    Redis 是单线程还是多线程 我们平时看到介绍 Redis 的文章,都会说 Redis 是单线程的.但是我们学习的时候,比如 Redis 的 bgsave 命令,它的作用是在后台异步保存当前数据库的 ...

  3. Redis是单线程还是多线程问题

    在学习redis的过程中,很多文章都说redis是单线程,但在官方给出的说明中显示,redis6.0已经引入了多线程,对此我找了许多文档,将学习过程整理记录下来. 1.Redis单线程 在一开始的时候 ...

  4. Redis 5.0.8+常见面试题(单线程还是多线程、先更新缓存还是数据库、雪崩穿透击穿解决办法...)

    Redis 6.0 保姆级教程(含微服务案例与完整面试题):https://www.yuque.com/yuxuandmbjz/redis Redis是单线程还是多线程 ?为什么这么设计 ? Redi ...

  5. 程序员过关斩将--请不要误会redis 6.0 的多线程

    " 你对redis的单线程是不是有点误会? " 你对redis 6.0的多线程是不是也有点误会? " redis多线程一定可以提高性能吗? redis官方刚刚发布的6.0 ...

  6. Redis新版本发布,你还认为Redis是单线程?

    Redis从单线程到多线程的转变 Redis简介 Redis单线程时代 `"单线程"`的Redis为什么会这么快? Redis的瓶颈 6.0版本后的Redis线程问题 redis的 ...

  7. 单线程多线程_面试系列 redis为什么快amp;单线程amp;多线程

    redis为什么这么快 C语言实现,执行速度快 纯内存操作,数据读写在内存中,异步持久化到磁盘 丰富和高效的数据结构 基于非阻塞的I/O多路复用机制 单线程避免了上下文切换 Redis单线程 redi ...

  8. Redis单线程和多线程

    Redis单线程 Reids是单线程! Reids是单线程! Reids是单线程! Redis架构模型:Redis 基于 Reactor 模式来设计开发了自己的一套高效的事件处理模型 ,即文件事件处理 ...

  9. Redis新特性、剖析线程模型(单线程与多线程)

    一. Redis6.0 新特性 1. 多线程IO redis6.0引入多线程IO,只是用来处理网络数据的读写和协议的解析,而执行命令依旧是单线程,所以不需要去考虑set/get.事务.lua等的并发问 ...

最新文章

  1. Android Textview 实现版权符号© 的 实现
  2. 中奖名单,老读者请看过来!
  3. JS验证框架的使用方法
  4. 超图桌面版新建一个简单三维数据集并发布
  5. 汇编中的通用寄存器、标志寄存器、段寄存器
  6. java使用stream将List转为Map
  7. 【算法精讲】分享一道很不错的算法题
  8. 18.linux日志收集数据到hdfs上面
  9. python学习===复制list
  10. 用python画漂亮图-零基础用 Python 画图表,让你的论文更美观
  11. C# 中字符串string和字节数组byte[]的转换
  12. 图片处理view - 成图,
  13. 用C语言实现万年历的代码及思路(详细教程)
  14. ai人工智能写歌词app,ai写歌词网站,ai作词软件创作版,作词人的辅助工具,押韵助手
  15. 海康VisionMaster-脚本模块
  16. 基于Ionic3和极光推送实现推送功能
  17. 自动发货-用千牛如何做到发货号自动转接人工号
  18. 关于字符串中length与length()的区别
  19. 全栈开发-IDE介绍与设置、字符串格式化、数据类型、for循环
  20. Java Web过滤器(Filter)

热门文章

  1. 大笨钟的心情 (15 分)
  2. 记国产数据库人大金仓使用
  3. html实现鼠标移动波纹效果,js实现拖动滑块和点击水波纹效果
  4. webservice使用的一些总结
  5. C#求解圆和圆的交点
  6. 20159313网络攻击与防范第九周学习总结
  7. matlab 实现2048游戏
  8. Linux命令详解(7)-find命令(一)
  9. android ios 音频寻,多媒体-iOS与Android的音频文件互通
  10. 标准中文电码查询易语言代码