Redis的快速很多人都知道是因为基于内存,但这只是一方面,其实redis在底层是一套很完善的多路复用事件处理机制来保证执行的高效的

线程模型
redis内部使用文件事件处理器file event handler,它包含如下几个部分

  • 多个socket

  • IO多路复用程序

  • 文件事件分派器

  • 事件处理器(连接应答处理器,命令请求处理器,命令回复处理器)

之所以说redis是单线程其实是指这个文件事件处理器是单线程的,它采用多路复用的方式监听系统上多个socket,将socket上产生的事件压入队列中,由文件事件分派器从队列中取出一个socket根据事件类型发给相应的事件处理器

整个处理过程如图:

处理过程可以分为以下几个步骤:

  • 客户端向redis发起一个socket请求,向redis的server socket请求连接,这里命名为socket01
  • server socket产生一个AE_READABLE事件,IO多路复用程序监听到事件后将这个socket01压入队列
  • 文件事件分派器从队列中取出socket01,交给连接应答处理器
  • 连接应答处理器会将socket01的AE_READABLE事件与命令请求处理器相关联
  • 假设客户端执行set操作,这时命令请求处理器会从socket01读取key value,在内存中完成key value的设置
  • 在内存中完成设置后,会将socket01的AE_WRITEABLE事件与命令回复处理器相关联,然后压入队列中
  • 事件分派器拿到socket01后,交给命令回复处理器,由命令回复处理器向socket01写入本次操作的结果,比如OK,之后解除关联

以上就是一个命令在redis中执行的过程

总结一下效率高的原因

  1. 内存操作
  2. IO多路复用机制,减少了阻塞
  3. 单线程避免了线程切换的开销和竞争问题
  4. 最最根本的redis是用C语言写的,本来就直接跟操作系统交互,命令执行快得飞起

Redis为何那么快-----底层原理浅析相关推荐

  1. redis单线程原理___Redis为何那么快-----底层原理浅析

    redis单线程原理 redis单线程问题 单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程. 1. 为什么说redis能够快速执行 ...

  2. redis rdb aof区别_聊一聊RDB、AOF在redis持久化里的底层原理

    什么是Redis持久化? Redis作为一个键值对内存数据库(NoSQL),数据都存储在内存当中,在处理客户端请求时,所有操作都在内存当中进行,如下所示: 这样做有什么问题呢? 其实,只要稍微有点计算 ...

  3. Docker 底层原理浅析

    作者:vitovzhong,腾讯 TEG 应用开发工程师 容器的实质是进程,与宿主机上的其他进程是共用一个内核,但与直接在宿主机执行的进程不同,容器进程运行在属于自己的独立的命名空间.命名空间隔离了进 ...

  4. Redis 动态字符串(SDS)底层原理详解

    文章目录 前言 1. 动态字符串 1.1 SDS的数据结构 1.2 SDS 与 C 字符串的区别 1.2.1 常数复杂度获取字符串长度 1.2.2 杜绝缓冲区溢出 1.3 减少修改字符串时带来的内存重 ...

  5. Redis的数据结构及底层原理

    一.Redis的两层数据结构简介 redis的性能高的原因之一是它每种数据结构都是经过专门设计的,并都有一种或多种数据结构来支持,依赖这些灵活的数据结构,来提升读取和写入的性能. 如果要了解redis ...

  6. 这么详细的Python matplotlib底层原理浅析

    复习回顾 前期,我们已经学习​matplotlib模块相关的基础知识,对 matplotlib 模块折线图.饼图.柱状图进行操作. 这么详细的Python matplotlib 绘制图形 还不赶紧收藏 ...

  7. Redis分布式锁的实现原理

    目前基于Redis实现的分布式锁常用的框架是Redisson,它的使用比较简单,在项目中引入Redisson的依赖,然后基于Redis实现分布式锁的加锁与释放锁. Redis分布式锁的底层原理 ​ R ...

  8. Redis分布式锁的实现原理看这篇就够了~

    2019独角兽企业重金招聘Python工程师标准>>> 一.写在前面 现在面试,一般都会聊聊分布式系统这块的东西.通常面试官都会从服务框架(Spring Cloud.Dubbo)聊起 ...

  9. redis 分布式锁的实现原理

    参考: 1,Redisson 实现 Redis 分布式锁的 N 种姿势 2,Redlock:Redis 分布式锁最牛逼的实现 3,Redis 全面解析三:redis 分布式锁的实现原理你了解吗 4,R ...

最新文章

  1. R语言使用aov函数进行双因素方差分析(Two-way factorial ANOVA)、使用interaction.plot函数在双因素方差分析中可视化交互作用(Interaction)
  2. java五子棋以当前空位为中心 取9个点_java 五子棋有点问题,哪位帮忙破一下、、...
  3. python练习9-7
  4. 【CodeForces - 735B】Urbanization (找规律,思维)
  5. WPF窗体最小化到任务栏
  6. MySQL复习值代码知识点(2)
  7. markdown生成html不出效果,mdeditor: 简单markdown编辑器,同步预览html效果。不依赖任何插件,使用简单,原创,造轮子中。。。更新中。。。...
  8. python定时任务之cron_Python定时任务框架APScheduler 3.0.3 Cron示例
  9. 像素生存者2为什么显示服务器不可用,像素生存者2为什么更新了玩不了 | 手游网游页游攻略大全...
  10. RN对接京东支付sdk(IOS)
  11. USB蓝牙适配器修改软件升级 玩转蓝牙配置虚拟BLE基站 修改MAC 和 RAWDATA数据
  12. java面试宝典app_Java面试宝典
  13. L7805CV-ASEMI三端稳压管L7805CV
  14. 利用简单电阻分压原理自动测量电阻
  15. 使用Blast2GO进行GO注释
  16. NETSDK1045 当前 .NET SDK 不支持将 .NET 6.0 设置为目标。请将 .NET 5.0 或更低
  17. 5G+工业互联网应用场景大集锦!
  18. AXURE 手机尺寸设置
  19. 01_ROS_Introduction
  20. linux-tomcat日志清理方案

热门文章

  1. 逐浪CMS2 X3.5功能预览:微信打赏与在线捐赠功能发布
  2. 计算机研究生复试英语自我介绍
  3. 程序员有什么错?凭什么杀我祭天!
  4. 基于PWM控制的声音播放的实现
  5. IT经典网站(国内,国外)!
  6. linux 网络设备,网卡配置 ,相关
  7. Qt 去除 标题按钮 保留边框
  8. Android 7.0中的多窗口-分屏-实现解析
  9. 谷歌浏览器扩展程序XDM_这才是谷歌浏览器的正确打开方式,有效节省内存占用,流畅飞起!...
  10. Druid拦截sql语句,实现在添加一个查询条件