Redis为什么这么快?

  1. 基于内存:Redis 将数据存储在内存中,内存访问速度远高于磁盘访问速度,因此能够快速读写数据。
  2. 单线程模型:Redis 使用单线程模型来处理客户端请求,避免了多线程之间的切换开销,简化了并发控制,提高了数据处理速度。
  3. 多路复用IO:Redis 使用非阻塞 I/O 处理网络请求,可以处理大量并发连接而不会造成线程阻塞,提高了网络通信效率。

多路复用IO原理:

        多路复用(Multiplexing)IO 是一种利用操作系统提供的机制同时监控多个文件描述符(sockets)的技术,通过一种非阻塞的方式实现对多个 IO 操作的复用,提高系统的 IO 操作效率。多路复用主要采用 select、poll、epoll 等系统调用来实现,这些调用可以同时监视多个文件描述符的可读、可写、异常等事件。

多路复用的基本原理包括以下几个步骤:

  1. 注册文件描述符:应用程序向操作系统内核注册多个文件描述符,告诉内核要监视的文件描述符和监视的事件类型。
  2. 阻塞等待:应用程序调用多路复用的系统调用(如 select、poll、epoll_wait)并进入阻塞等待状态,等待有任何一个注册的文件描述符发生事件(可读、可写等)。
  3. 事件触发:一旦有文件描述符上发生了监视的事件,内核将唤醒应用程序,返回就绪文件描述符的信息。
  4. 处理事件:应用程序通过轮询返回的就绪文件描述符集合,逐一处理每个就绪文件描述符上发生的事件,进行相应的 IO 操作。

select、poll、epoll 的区别:

select、poll 和 epoll 都是在网络编程中用于 I/O 复用的机制,它们的主要作用是在多个文件描述符中等待并检测哪些文件描述符已经就绪可进行 I/O 操作。

select:

  • select 是最古老的 I/O 复用函数之一,在 POSIX 标准中提供支持。
  • 通过调用 select 函数,可以同时监视多个文件描述符,当其中任何一个文件描述符就绪时,select 函数会返回,并告知哪些文件描述符已经就绪。
  • 有三个主要限制:文件描述符数量上限受限于 FD_SETSIZE 宏定义(通常为 1024),每次调用都需要将文件描述符集合从用户态拷贝到内核态,效率较低,复杂度随着文件描述符数量增加而增加。

poll:

  • poll 是对 select 的改进,也用于实现 I/O 复用。
  • 与 select 不同,poll 没有文件描述符数量限制,使用对象是一个 pollfd 结构体数组。
  • 调用 poll 函数时,内核会遍历所有的 pollfd 结构体,找出其中已经就绪的文件描述符,并返回。
  • 虽然解决了 select 的文件描述符数量限制问题,但效率依然不高,因为每次调用 poll 都需要将 pollfd 结构体数组从用户态拷贝到内核态。

epoll:

  • epoll 是 Linux 特有的 I/O 复用机制,相比于 select 和 poll 更加高效。
  • epoll 使用一组事件管理文件描述符,无需将文件描述符从用户态拷贝到内核态,因此效率更高。
  • 通过调用 epoll_create 创建 epoll 实例,然后使用 epoll_ctl 向 epoll 实例中添加、修改或删除需要关注的文件描述符,最后调用 epoll_wait 等待文件描述符就绪。
  • epoll 支持水平触发和边缘触发两种模式,可以更灵活地处理事件

ps:以下是我整理的java面试资料,密码是obht,感兴趣的可以看看。最后,创作不易,觉得写得不错的可以点点关注!

链接:https://www.yuque.com/u39298356/uu4hxh?# 《Java面试宝典》 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/717971.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32(11)按键产生中断

1.初始化IO引脚,设置模式,速度等 2.设置AFIO(配置EXTI的引脚映射),记得开启时钟 3.配置EXTI的通道(EXTI0和EXTI1) 4.配置NVIC 4.1 中断优先级分组 4.2 配置中断 5.编写中断响应函数 在中断向量…

消息队列的实现

8.8 消息队列 队列是一种先进先出的结构,消息队列是进程(线程)常用的一种方法,实现消息队列常用的方法: (1)阻塞队列 (2)无锁队列 (3)环形队列 值得注意的是&#xff…

蓝桥ACM培训-实战1

前言&#xff1a; 今天老师没讲课&#xff0c;只让我们做了一下几道题目。 正文&#xff1a; Problem:A 小蓝与操作序列&#xff1a; #include<bits/stdc.h> using namespace std; stack<int> a; int main(){int n,flag1,ans;string cz;cin>>n;for(int i1;…

访问修饰符、Object(方法,使用、equals)、查看equals底层、final--学习JavaEE的day15

day15 一、访问修饰符 含义&#xff1a; 修饰类、方法、属性&#xff0c;定义使用的范围 理解&#xff1a;给类、方法、属性定义访问权限的关键字 注意&#xff1a; ​ 1.修饰类只能使用public和默认的访问权限 ​ 2.修饰方法和属性可以使用所有的访问权限 访问修饰符本类本包…

JetCache源码解析——API实现(持续更新中……)

在JetCache中不仅可以通过在类和接口的函数上使用注解Cached、CacheUpdate和CacheInvalidate等实现缓存加载、更新和删除操作&#xff0c;也支持通过调用API接口的形式来实现缓存的加载、更新和删除操作。 缓存接口 缓存接口的定义如下&#xff1a; /*** 缓存接口&#xff0…

【计算机网络】HTTPS 协议原理

https 一、HTTPS 是什么二、加密1. 加密概念2. 加密的原因3. 常见的加密方式&#xff08;1&#xff09;对称加密&#xff08;2&#xff09;非对称加密 三、数据摘要(数据指纹)四、HTTPS 的工作原理探究1. 只使用对称加密2. 只使用非对称加密3. 双方都使用非对称加密4. 非对称加…

Linux:kubernetes(k8s)部署CNI网络插件(4)

在上一章进行了node加入master Linux&#xff1a;kubernetes&#xff08;k8s&#xff09;node节点加入master主节点&#xff08;3&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/136420447?spm1001.2014.3001.5501 但是他们显示还是没准备好 看一下…

面试笔记系列五之MySql+Mybaits基础知识点整理及常见面试题

目录 Myibatis myibatis执行过程 mybatis的优缺点有哪些&#xff1f; mybatis和hibernate有什么区别&#xff1f; mybatis中#{}和${}的区别是什么&#xff1f; 简述一下mybatis插件运行原理及开发流程&#xff1f;&#xff08;插件四大天王&#xff09; mybatis的mapper没…

2.模拟问题——5.星期几与字符串对应

输入输出示例 输入&#xff1a; 9 October 2001 14 October 2001 输出&#xff1a; Tuesday Sunday 【原题链接】 字符串处理 C风格的字符串 字符数组&#xff0c;以’\0‘结尾建议在输入输出语句中使用 C风格的字符串 #include <string> using namespace std;初始化…

「优选算法刷题」:最长回文子串

一、题目 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 解释&#xff1a;"aba"…

【字符串】马拉车(Manacher)算法

本篇文章参考&#xff1a;比较易懂的 Manacher&#xff08;马拉车&#xff09;算法配图详解 马拉车算法可以求出一个字符串中的最长回文子串&#xff0c;时间复杂度 O ( n ) O(n) O(n) 因为字符串长度的奇偶性&#xff0c;回文子串的中心可能是一个字符&#xff0c;也可能是…

uniapp聊天记录本地存储(详细易懂)

目录 目录 1、通过websocket拿取数据 2、获取聊天数据 3、聊天信息存储 、更新 4、读取聊天记录 5、发送信息&#xff0c;信息获取 6、最终效果 1.聊天信息的存储格式 2、样式效果 写聊天项目&#xff0c;使用到了本地存储。需要把聊天信息保存在本地&#xff0c;实时获…

GPT对话知识库——ARM-Cortex架构分为哪几个系列?每个系列有几种工作模式?各种工作模式之间的定义和区别?每种架构不同的特点和应用需求?

提问模型&#xff1a;GPT-4-TURBO-PREVIEW 提问时间&#xff1a;2024.03.02 1&#xff0c;问&#xff1a; Cortex-M系列有几种工作模式 1&#xff0c;答&#xff1a; Cortex-M系列微控制器是ARM公司开发的一类低功耗、高性能的32位微处理器&#xff0c;广泛应用于嵌入式系统中…

Centos7使用man查找命令时,报错No manual entry for xxxx

Centos7使用man查找命令时&#xff0c;报错No manual entry for xxxx 在Linux中使用man指令查找指令信息时&#xff0c;报No manual entry for xxxx。 比如使用man指令查找sleep3号手册时&#xff0c;出现以下错误&#xff1a; 这是由于没有安装man-pages这个rpm包导致的&#…

掌握基本排序算法:冒泡、选择、插入和快速排序

在计算机科学的世界里&#xff0c;排序是一项基本而重要的操作。无论是数据库管理、搜索引擎&#xff0c;还是日常编程&#xff0c;高效的排序算法都是提高性能的关键。本文将介绍四种基本的排序算法&#xff1a;冒泡排序、选择排序、插入排序和快速排序&#xff0c;并探讨它们…

从0开始学习NEON(1)

1、前言 在上个博客中对NEON有了基础的了解&#xff0c;本文将针对一个图像下采样的例子对NEON进行学习。 学习链接:CPU优化技术 - NEON 开发进阶 上文链接:https://blog.csdn.net/weixin_42108183/article/details/136412104 2、第一个例子 现在有一张图片&#xff0c;需…

获取 Windows 通知中心弹窗通知内容(含工具汉化)

目录 前言 技术原理概述 测试代码和程序下载连接 本文出处链接&#xff1a;https://blog.csdn.net/qq_59075481/article/details/136440280。 前言 从 Windows 8.1 开始&#xff0c;Windows 通知现在以 Toast 而非 Balloon 形式显示&#xff08; Bollon 通知其实现在是应用…

在ubuntu上安装hadoop完分布式

准备工作 Xshell安装包 Xftp7安装包 虚拟机安装包 Ubuntu镜像源文件 Hadoop包 Java包 一、安装虚拟机 创建ubuntu系统 完成之后会弹出一个新的窗口 跑完之后会重启一下 按住首先用ctrlaltf3进入命令界面&#xff0c;输入root&#xff0c;密码登录管理员账号 按Esc 然后输入 …

数据结构常用的字符串函数(中英双释)

头文件&#xff1a;string.h 1.strchr const char * strchr ( const char * str, int character ); Locate first occurrence of character in string str C string. character Character to be located. Return Value A pointer to the first occurrence of character in s…

适用于恢复iOS数据的 10 款免费 iPhone 恢复软件

现在&#xff0c;您可以获得的 iPhone 的存储容量比大多数人的笔记本电脑和台式电脑的存储容量还要大。虽然能够存储数千张高分辨率照片和视频文件、安装数百个应用程序并随身携带大量音乐库以供离线收听固然很棒&#xff0c;但在一个地方拥有如此多的数据可能会带来毁灭性的后…