当前位置: 首页 > 科技观察

为什么Redis是单线程的却这么快

时间:2023-03-13 08:52:51 科技观察

Redis高并发快的原因1、Redis是基于内存的,内存的读写速度非常快;2、Redis是单线程的,节省了很多上下文切换线程的时间;3、Redis使用多路复用技术处理并发连接。非阻塞IO内部实现采用epoll,采用epoll+自己实现的简单事件框架。epoll中的读、写、关闭、连接,全部转化为事件,然后利用epoll的多路复用特性,再也不会在io上浪费一点时间。下面重点说说单线程设计和IO多路复用内核设计快的原因。为什么Redis是单线程的1.官方回答因为Redis是基于内存运行的,所以CPU不是Redis的瓶颈,Redis的瓶颈很可能是机器内存的大小或者网络带宽。由于单线程容易实现,而且CPU不会成为瓶颈,所以采用单线程方案是顺理成章的。2、性能指标关于redis的性能,官网也有。普通笔记本每秒可以轻松处理数十万个请求。3、详细原因1)各种锁的性能消耗不是必须的。Redis的数据结构不全是简单的Key-Value,还有list、hash等复杂结构。这些结构可能会执行非常细粒度的操作,例如将元素添加到长列表的末尾,在散列中添加或删除对象。这些操作可能需要大量的锁,导致同步开销大大增加。总之,在单线程的情况下,不需要考虑各种锁的问题,没有释放锁的操作,也没有可能死锁带来的性能消耗。2)单线程多进程集群方案单线程的威力其实很强大,每个核心的效率也很高。自然,多线程可以有比单线程更高的性能上限,但是在当今的计算环境下,即使是单机多线程的上限也往往不能满足需求。需要进一步探索的是多服务器集群解决方案。在这些解决方案中,多线程技术仍然不可用。所以单线程、多进程集群是一种时髦的解决方案。3)CPU消耗采用单线程,避免了不必要的上下文切换和竞争条件,不会因为多进程或多线程引起的切换而消耗CPU。但是,如果CPU成为Redis的瓶颈,或者您不想让服务器的其他CPU核心闲置怎么办?可以考虑启动多个Redis进程。Redis是key-value数据库,不是关系型数据库,数据之间没有约束。只要客户端能区分哪些key放在哪个Redis进程中就可以了。Redis单线程的优缺点1.单进程单线程的优点代码更清晰,处理逻辑更简单。不需要考虑各种锁,没有释放锁的操作,也没有因为可能出现的死锁而导致的性能消耗。多进程或多线程引起的切换会消耗CPU。2、单进程单线程的劣势不能充分发挥多核CPU的性能,但可以通过单机开多个Redis实例来改善;IO多路复用技术redis使用网络IO多路复用技术来保证系统在存在多个连接时的高吞吐量。多路复用——指多个socket连接,多路复用——指多路复用一个线程。多路复用主要有3种技术:select、poll、epoll。epoll是最先进的,也是目前最先进的多路复用技术。这里的“多路复用”是指多个网络连接,“多路复用”是指多路复用同一个线程。使用多I/O多路复用技术,可以让单个线程高效处理多个连接请求(最大限度地减少网络IO的时间消耗),Redis在内存中操作数据的速度非常快(内存操作不会成为这里的性能瓶颈),主要以上两点使得Redis具有很高的吞吐量。Redis高并发快速总结1.Redis是一个纯内存数据库,一般都是简单的访问操作。线程占用时间比较多,花费的时间主要集中在IO上,所以读取速度快。2、再来说说IO。Redis使用非阻塞IO和IO多路复用。它使用单线程轮询描述符,将数据库的打开、关闭、读取、写入转化为事件,减少了线程切换的时间。上下文切换和竞争。3、Redis采用单线程模型,保证了每个操作的原子性,减少线程上下文切换和竞争。4.另外,数据结构也帮了大忙。Redis全程使用hash结构,读取速度快。还有一些优化数据存储的特??殊数据结构,如压缩表,将短数据压缩存储。另一个例子是跳表,它使用有序的数据结构来加快读取速度。5、还有一点,Redis使用了自己实现的事件分离器,效率比较高,而且内部使用了非阻塞的执行方式,吞吐量比较大。