一、Redis为什么这么快
Redis是一个基于内存的采用单进程单线程模型的key-value数据库,由c语言编写,官方提供的数据是可以达到100000+QPS。为什么能这么快,主要有以下几点:
- 完全基于内存,绝大多数请求都是纯粹的内存操作,非常快速。数据存储在内存中相当于HashMap,查找和操作时间复杂度都是O(1)。
- 采用单线程,避免了不必要的竞争和上下文切换,也不存在多线程或多进程导致的切换而消耗CPU。因为是单线程的,也不需要去考虑锁的问题,不存在加锁或释放锁操作。
- 使用多路IO复用模型,非阻塞IO。(epoll)
- 数据结构简单,对数据操作也简单,Redis中的数据结构时专门进行设计的
二、多路IO复用模型
多路IO复用模型是利用select、poll、epoll可以同时监察多个流的IO事件的能力。在空闲的时候会把当前线程阻塞掉,当一个或多个流中有IO事件时,就把当前线程从阻塞态唤醒。于是程序就会轮询一遍所有的流,并以此处理就绪的流,这种做法避免了大量无用操作。
这里的多路是指多个网络连接,复用指的是复用一个或多个线程。采用多路复用可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗)。且Redis在内存中操作数据的速度非常快,内存不会成为影响Redis性能的瓶颈,主要由以上几点造就了Redis具有很高的吞吐量。
三、为什么Redis是单线程的
Redis是基于内存的操作,CPU不是Redis的瓶颈(一个CPU就够用了),Redis的瓶颈最有可能是机器内存的大小或者网络带宽。既然单线程容易实现,而且CPU不会成为瓶颈,那就顺理成章的采用单线程方案了。(我们一直在强调单线程,只是在处理网络请求的时候只有一个线程来处理,一个正式的Redis Server运行时肯定不是单线程的)。
文章参考:https://blog.csdn.net/xlgen157387/article/details/79470556