Redis为何那么快-----底层原理浅析
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中执行的过程
总结一下效率高的原因
- 内存操作
- IO多路复用机制,减少了阻塞
- 单线程避免了线程切换的开销和竞争问题
- 最最根本的redis是用C语言写的,本来就直接跟操作系统交互,命令执行快得飞起
Redis为何那么快-----底层原理浅析相关推荐
- redis单线程原理___Redis为何那么快-----底层原理浅析
redis单线程原理 redis单线程问题 单线程指的是网络请求模块使用了一个线程(所以不需考虑并发安全性),即一个线程处理所有网络请求,其他模块仍用了多个线程. 1. 为什么说redis能够快速执行 ...
- redis rdb aof区别_聊一聊RDB、AOF在redis持久化里的底层原理
什么是Redis持久化? Redis作为一个键值对内存数据库(NoSQL),数据都存储在内存当中,在处理客户端请求时,所有操作都在内存当中进行,如下所示: 这样做有什么问题呢? 其实,只要稍微有点计算 ...
- Docker 底层原理浅析
作者:vitovzhong,腾讯 TEG 应用开发工程师 容器的实质是进程,与宿主机上的其他进程是共用一个内核,但与直接在宿主机执行的进程不同,容器进程运行在属于自己的独立的命名空间.命名空间隔离了进 ...
- Redis 动态字符串(SDS)底层原理详解
文章目录 前言 1. 动态字符串 1.1 SDS的数据结构 1.2 SDS 与 C 字符串的区别 1.2.1 常数复杂度获取字符串长度 1.2.2 杜绝缓冲区溢出 1.3 减少修改字符串时带来的内存重 ...
- Redis的数据结构及底层原理
一.Redis的两层数据结构简介 redis的性能高的原因之一是它每种数据结构都是经过专门设计的,并都有一种或多种数据结构来支持,依赖这些灵活的数据结构,来提升读取和写入的性能. 如果要了解redis ...
- 这么详细的Python matplotlib底层原理浅析
复习回顾 前期,我们已经学习matplotlib模块相关的基础知识,对 matplotlib 模块折线图.饼图.柱状图进行操作. 这么详细的Python matplotlib 绘制图形 还不赶紧收藏 ...
- Redis分布式锁的实现原理
目前基于Redis实现的分布式锁常用的框架是Redisson,它的使用比较简单,在项目中引入Redisson的依赖,然后基于Redis实现分布式锁的加锁与释放锁. Redis分布式锁的底层原理 R ...
- Redis分布式锁的实现原理看这篇就够了~
2019独角兽企业重金招聘Python工程师标准>>> 一.写在前面 现在面试,一般都会聊聊分布式系统这块的东西.通常面试官都会从服务框架(Spring Cloud.Dubbo)聊起 ...
- redis 分布式锁的实现原理
参考: 1,Redisson 实现 Redis 分布式锁的 N 种姿势 2,Redlock:Redis 分布式锁最牛逼的实现 3,Redis 全面解析三:redis 分布式锁的实现原理你了解吗 4,R ...
最新文章
- R语言使用aov函数进行双因素方差分析(Two-way factorial ANOVA)、使用interaction.plot函数在双因素方差分析中可视化交互作用(Interaction)
- java五子棋以当前空位为中心 取9个点_java 五子棋有点问题,哪位帮忙破一下、、...
- python练习9-7
- 【CodeForces - 735B】Urbanization (找规律,思维)
- WPF窗体最小化到任务栏
- MySQL复习值代码知识点(2)
- markdown生成html不出效果,mdeditor: 简单markdown编辑器,同步预览html效果。不依赖任何插件,使用简单,原创,造轮子中。。。更新中。。。...
- python定时任务之cron_Python定时任务框架APScheduler 3.0.3 Cron示例
- 像素生存者2为什么显示服务器不可用,像素生存者2为什么更新了玩不了 | 手游网游页游攻略大全...
- RN对接京东支付sdk(IOS)
- USB蓝牙适配器修改软件升级 玩转蓝牙配置虚拟BLE基站 修改MAC 和 RAWDATA数据
- java面试宝典app_Java面试宝典
- L7805CV-ASEMI三端稳压管L7805CV
- 利用简单电阻分压原理自动测量电阻
- 使用Blast2GO进行GO注释
- NETSDK1045 当前 .NET SDK 不支持将 .NET 6.0 设置为目标。请将 .NET 5.0 或更低
- 5G+工业互联网应用场景大集锦!
- AXURE 手机尺寸设置
- 01_ROS_Introduction
- linux-tomcat日志清理方案