Redis为什么这么快?

目录

一、Redis为什么这么快?

二、Redis为什么是单线程的?


一、Redis为什么这么快?

Redis采用的是基于内存的采用的是单进程单线程模型的 KV 数据库,由C语言编写,官方提供的数据是可以达到100000+的QPS(每秒内查询次数)。以下几点造就了Redis非常快的特点:

  • 单线程不用处理上下文的切换,cpu利用率会比多线程高;

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

  • 数据结构简单,操作节省时间;

数据结构简单,对数据操作也简单;

  • 运行在内存中,自然速度快(Redis 将数据储存在内存里面,读写数据的时候都不会受到硬盘 I/O 速度的限制,所以速度极快。);

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

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

以上几点都比较好理解,下面针对多路 I/O 复用模型进行简单的说明:

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

多路I/O复用模型是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络 IO 的时间消耗),且 Redis 在内存中操作数据的速度非常快,也就是说内存内的操作不会成为影响Redis性能的瓶颈,主要由以上几点造就了 Redis 具有很高的吞吐量。

这里“多路”指的是多个网络连接,“复用”指的是复用同一个线程。

二、Redis为什么是单线程的?

根据Redis官网解释,Redis的瓶颈并不是cpu的运行速度,而是网络带宽和机器的内存大小。并且单线程切换开销较小,容易实现,既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章地采用单线程实现的方案。

既然Redis是单线程的,那么单线程方式导致的一个问题就是无法发挥多核CPU的性能,那么有什么办法可以发挥多核CPU功能么?

我们可以通过在单台机器上开启多个Redis实例来充分发挥多核CPU的性能。

注意:这里我们一直在强调的单线程,只是在处理我们的网络请求的时候只有一个线程来处理,一个正式的Redis Server运行的时候肯定是不止一个线程的,例如Redis进行持久化的时候会fork一个子进程方式执行等等。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付 19.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值