Redis必知必会(3)| 青训营

60 阅读2分钟

之前的内容介绍了Redis的持久化技术,是Redis的高频考点,本节课主要向大家介绍Redis的另一大特征——单线程。在我们传统的认知当中,单线程的效率是不足的,所以计算机从单核慢慢演进为了多核的CPU,人们希望通过创建多个线程来提高整体的吞吐,理想中的情况是吞吐量和线程数呈线性相关的,但实际情况并非我们预期的,如下图所示:

image.png

出现上述情况的原因包括,多线程带来线程安全的问题,也就是竞态区的存在,使用者必须加上一些保障措施,例如锁的方式,这些措施的接入就导致了预期结果相差甚远。Reids其中一个特点是“单线程”,但是他的性能却能做到非常好,这不禁让我们思考她是怎么做到的。

起始上面看到我在单线程上加了引号,这是因为所谓的单线程只表示网络的IO操作和读写操作时单线程来完成的,但是Redis的其他操作比如前面介绍的持久化等都是交给其他线程来完成的,所以严格意义上的Redis并不是单线程的!

接下来我们思考一个问题:为什么单线程的Redis可以这么快?

第一个方面,Redis是内存结构,Redis提供了多种高效的数据结构例如跳表、哈希表等等。另一个方面则是因为Redis使用了IO多路复用能够并发处理大量的客户需求,实现高吞吐。所以从这两方面让Redis做到了单线程但是高性能!