Redis单线程单进程为什么效率那么高

news/2024/7/9 16:07:15 标签: 数据库, epoll, 数据结构与算法

1、完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1);

2、数据结构简单,对数据操作也简单,Redis中的数据结构是专门进行设计的;

3、采用单线程,避免了不必要的上下文切换和竞争条件,也不存在多进程或者多线程导致的切换而消耗 CPU,不用去考虑各种锁的问题,不存在加锁释放锁操作,没有因为可能出现死锁而导致的性能消耗;

4、使用多路I/O复用模型,非阻塞IO;

5、使用底层模型不同,它们之间底层实现方式以及与客户端之间通信的应用协议不一样,Redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求;

以上几点都比较好理解,下边我们针对多路 I/O 复用模型进行简单的探讨:

(1)多路 I/O 复用模型

多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。

这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗),且 Redis 在内存中操作数据的速度非常快,也就是说内存内的操作不会成为影响Redis性能的瓶颈,主要由以上几点造就了 Redis 具有很高的吞吐量。

那么为什么Redis是单线程的

我们首先要明白,上边的种种分析,都是为了营造一个Redis很快的氛围!官方FAQ表示,因为Redis是基于内存的操作,CPU不是Redis的瓶颈,Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程的方案了(毕竟采用多线程会有很多麻烦!)。

这里我们一直在强调的单线程,只是在处理我们的网络请求的时候只有一个线程来处理,一个正式的Redis Server运行的时候肯定是不止一个线程的,这里需要大家明确的注意一下!

转载:https://blog.csdn.net/chenyao1994/article/details/79491337

转载于:https://www.cnblogs.com/chuijingjing/p/10391093.html


http://www.niftyadmin.cn/n/816286.html

相关文章

使用dev-sidecar快速访问github教程

点击访问github官网 教程-下载dev-sidecar 1.打开此网址 2.点击Github Release 3.下载版本选择 下面以windows为例,选择DevSidecar-1.7.3.exe 如果此链接无法打开,windows用户可使用此网盘链接下载DevSidecar-1.7.3.exe 链接:点击跳转到网…

java构造函数可以向上跑异常吗?_构造函数可以在Java中引发异常吗?

甲构造用于创建时初始化对象。从语法上讲,它类似于一种方法。区别在于,构造函数的名称与其类相同,并且没有返回类型。无需显式调用构造函数,这些构造函数会在实例化时自动调用。示例public class Example {public Example(){Syste…

Linux rm -rf /* 使用方法

rm -rf / --no-preserve-root转载于:https://www.cnblogs.com/xiangsikai/p/10392049.html

清除缓存的代码

清除缓存的代码 <script> $(document).ready(function(){$("#sleep").click(function(){alert("正在清除&#xff0c;请稍后");setTimeout("alert(清除成功)",1000);}); }); </script><button id"sleep" type"bu…

查看mycat日志

查看日志&#xff1a;tail -f /usr/local/mycat/logs/wrapper.log 转载于:https://www.cnblogs.com/effortsing/p/10392839.html

2-1线性表-顺序表

一.特点 1.优点 &#xff08;1&#xff09;随机访问。通过首地址和元素序号可在O(1)内找到指定元素。 &#xff08;2&#xff09;存储密度高。每个结点只存储数据元素。 2.缺点 &#xff08;1&#xff09;拓展容量不方便 &#xff08;2&#xff09;逻辑上相邻的元素物理上也相邻…

2-2线性表-链表

一.单链表&#xff08;一&#xff09;特点1.优点不要求大片的连续空间&#xff0c;改变容量方便2.缺点不可以随机存取&#xff0c;要耗费一定的空间存放指针&#xff08;二&#xff09;代码定义 1.初步代码 struct LNode {//结点ElemType data;struct LNode *next; };2.新增结…

java native 原理_一种Java+Native应用的系统架构的制作方法

本发明涉及智能卡技术领域&#xff0c;特别是要求支持Java功能的智能卡领域。背景技术&#xff1a;Java卡是Sun微系统为智能卡开发平台而制定的一个开放的标准。使用Java卡平台创建的智能卡上存有Java applet。在卡发行后也可以把applet加到卡上或修改卡上已有的applet。它们把…