从0开始回顾Redis---系列二

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: Redis单线程1、单线程Redis为什么这么快?1. 单线程实现:避免了多线程编程模式面临的共享资源的并发访问控制问题,比如线程切换和锁资源争用的开销。2. 内存存储:Redis是使用内存存储,没有磁盘IO上的开销。3. 高效的数据结构: 采用了高效的数据结构,例如哈希表和跳表,这是它实现高性能的一个重要原因。4. 采用多路复用机制:使其在网络IO操作中能并发处理大量的客户端请求,实现高吞吐率。2、基于多路复用的高性能I/O模型多路复用机制是指一个线程处理多个IO流,就是我们经常听到的select/epoll机制。简单来说,在Redis只运行单线程的情况下,该机制允许内

Redis单线程


1、单线程Redis为什么这么快?


  1. 单线程实现避免了多线程编程模式面临的共享资源的并发访问控制问题,比如线程切换和锁资源争用的开销。
  2. 内存存储Redis是使用内存存储,没有磁盘IO上的开销。
  3. 高效的数据结构 采用了高效的数据结构,例如哈希表和跳表,这是它实现高性能的一个重要原因。
  4. 采用多路复用机制:使其在网络IO操作中能并发处理大量的客户端请求,实现高吞吐率。


2、基于多路复用的高性能I/O模型


多路复用机制是指一个线程处理多个IO流,就是我们经常听到的select/epoll机制。简单来说,在Redis只运行单线程的情况下,该机制允许内核中,同时存在多个监听套接字和已连接套接字。内核会一直监听这些套接字上的连接请求或数据请求。一旦有请求到达,就会交给Redis线程处理,这就实现了一个Redis线程处理多个IO流的效果。

Redis网络框架调用epoll机制,让内核监听这些套接字。此时,Redis线程不会阻塞在某一个特定的监听或已连接套接字上,也就是说,不会阻塞在某一个特定的客户端请求处理上。正因为此,Redis可以同时和多个客户端连接并处理请求,从而提升并发性。  

为了在请求到达时能通知到Redis线程,select/epoll提供了基于事件的回调机制即针对不同事件的发生, 调用相应的处理函数。  

具体过程如下

  1. Redis网络框架调用epoll机制,让内核监听这些套接字。
  2. select/epoll一旦监测到FD(套接字)上有请求到达时,就会触发相应的事件。
  3. 这些事件会被放进一个事件队列,Redis单线程对该事件队列不断进行处理。

总结

这样一来,Redis无需一直轮询是否有请求事件发生,这就可以避免造成CPU资源浪费。同时,Redis在对事件队列中的事件进行处理时,会调用相应的处理函数,这就实现了基于事件的回调。因为Redis一直在对事件队列进行处理,所以能及时响应客户端请求,提升Redis的响应性能


3、Redis为啥被称为单线程?


  1. Redis是单线程,主要是指Redis的网络IO和键值对读写是由一个线程来完成的这也是Redis对外提供键值存储服务的主要流程。
  2. 但Redis的其他功能,比如持久化、异步删除、集群数据同步等,其实是由额外的线程执行的。所以,严格来说,Redis并不是单线程,但是我们一般把Redis称为单线程高性能,这样显得“酷”些。


4、Redis6.0为什么引入多线程?


  1. Redis主要瓶颈在于内存与网络IO,内存不够可以增加或提供数据结构优化,而网络lO读写占时间,若可以将网络处理改为多线程,性能将大幅度提高。
  2. 引入多线程处理网络读写,执行命令还是单线程,充分利用服务器多核资源。
相关文章
|
人工智能 架构师 项目管理
软件工程师,超过35岁怎么办
软件工程师,超过35岁怎么办
421 71
|
9月前
|
算法 编译器 C++
【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)
【狂热算法篇】探秘图论之Dijkstra 算法:穿越图的迷宫的最短路径力量(通俗易懂版)
|
移动开发 前端开发
flowable多对并发网关跳转的分析
flowable多对并发网关跳转的分析
238 0
|
XML Android开发 数据安全/隐私保护
android 11后文件读写访问权限申请
android 11后文件读写访问权限申请
673 0
|
弹性计算 固态存储 数据可视化
服务器租用收费标准是什么呢?阿里云服务器租用一般多少钱
服务器租用收费标准是什么呢?阿里云服务器租用一般多少钱,2023年阿里云服务器租用费用,轻量应用服务器和云服务器ECS优惠价格表,阿里云轻量应用服务器2核2G3M带宽轻量服务器一年108元,2核4G4M带宽轻量服务器一年297.98元12个月,云服务器ECS包括通用算力型u1、ECS计算型c7、通用型g7和内存型r7均有活动
652 0
|
Java 应用服务中间件 Apache
Tomcat Web环境搭建(eclipse)2
Tomcat Web环境搭建(eclipse)2
186 0
|
存储 SQL NoSQL
轨迹数据处理“小钢炮”,Lindorm时空引擎Ganos实测
本文在Lindorm Ganos中对常用的时空场景进行测试,用过程和实际数据展示Lindorm Ganos具备的能力和特性
轨迹数据处理“小钢炮”,Lindorm时空引擎Ganos实测
|
机器学习/深度学习 数据可视化 TensorFlow
ResNext架构解析:深度神经网络的聚合残差变换
我们提出了一种用于图像分类的简单、高度模块化的网络架构。我们的网络是通过重复一个构建块来构建的,该构建块聚合了一组具有相同拓扑的转换。我们简单的设计产生了一个同构的多分支架构,只需设置几个超参数。这个策略**暴露了一个新的维度,我们称之为“基数”(转换集的大小)**,作为除了深度和宽度维度之外的重要因素。在 ImageNet-1K 数据集上,我们凭经验表明,即使在保持复杂性的限制条件下,增加基数也能够提高分类精度。此外,当我们增加容量时,增加基数比更深或更宽更有效。我们的模型名为 ResNeXt,是我们进入 ILSVRC 2016 分类任务的基础,在该任务中我们获得了第二名。我们在 Image
849 0
ResNext架构解析:深度神经网络的聚合残差变换
|
自然语言处理 编译器 索引
Solr schema编写指导
假期重新把之前在新浪博客里面的文字梳理了下,搬到这里。
169 0
|
XML 缓存 安全
回顾| 学习笔记
简介: 快速学习回顾
140 0

热门文章

最新文章