Redis高性能的原因-我们深究一下

Redis高性能的原因-我们深究一下

学习新技术时,如果只接触零散的技术点,没有在脑海里建立完整的知识体系,就会很吃力,就会出现 "看起来好像会,明明之前看过,可是就是想不起来"的情况。

下面我们来探讨下,面试中经常问到的一个问题,

“Redis的性能为什么那么强?”

大部分人都还停留在Redis基于内存实现,并不了解其核心原因。今天,我带你一起探索一下Redis高性能的几个原因,具体表现在哪里,话不多说,直接步入主题。

根据官方的数据,Redis的每秒请求数(QPS)可以达到100000,当然感兴趣的伙伴们可以去官网扒一扒基准程序测试报告《How fast
is Redis?》。

Redis高性能的几个主要原因:

Alt

基于内存实现

Redis读写都是在内存中完成,内存直接由CPU控制,也就是由CPU内部集成内存控制器,所以说内存是直接与CPU对接的,享受CPU通信的"最优带宽"。Redis将数据存储在内存中,读写操作不会被磁盘的I/O速度限制。关于磁盘数据加载的I/O涉及到内核态和用户态之间的数据拷贝,大家可以去了解下零拷贝机制,传统的I/O数据传输机制。

I/O多路复用模型

Redis采用I/O多路复用技术并发处理连接请求。采用Epoll+自己实现的简单事件框架,实现将Epoll的读,写,关闭,连接都转化为事件,再利用Epoll的多路复用特性实现一个高性能的网络事件处理框架。

一次基本的网络I/O数据读取会经历以下过程:

  1. 服务端的bind/listen绑定Ip地址并监听指定端口的请求,与客户端建立accept.
  2. 从Socket中读取recv
  3. 解析客户端发送的请求parse
  4. 执行get命令
  5. send执行相应客户端数据,也就是向socket写回数据

其中bind,accept,recv,parse,send都是网络I/O处理,而get命令属于数据操作,而对于Redis单线程处理时(Redis6.0引入I/O多线程模型),其中的关键是accept和recv会出现阻塞,当Redis监听到一个客户端有连接请求,但一直未能成功建立连接时,会阻塞在accept函数,导致其它客户端无法和Redis建立连接。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员路同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值