天天看点

Redis原理--速度快其他网址Redis为什么速度很快Redis单线程的优缺点为什么单线程还这么快?

其他网址

【Redis】为什么Redis单线程却能支撑高并发?Redis6.0之后为什么又引入多线程?_-CSDN博客

为什么单线程的Redis却能支撑高并发 - 一中晴哥威武 - 博客园

redis 的线程模型是什么?为什么 redis 单线程却能支撑高并发? - 简书

《Redis开发与运维》=> 1.2 Redis特性=> 1. 速度快

Redis为什么速度很快

  1. 数据存放在内存中
    1. 内存的读写速度是磁盘(数据库)的一百倍左右。
  2. 用C语言实现
    1. C语言更底层, 执行速度相对会更快。
  3. 单线程架构
    1. 预防了多线程可能产生的竞争问题。
  4. 作者对代码的精打细磨
    1. 曾经有人评价Redis是少有的集性能和优雅于一身的开源代码。

Redis单线程的优缺点

单进程单线程优势

  1. 没有多线程竞争锁的性能消耗。
  2. 没有多线程导致的切换而消耗CPU。

单进程单线程弊端

CPU不是Redis的瓶颈,无法发挥多核CPU性能。不过可以通过在单机开多个Redis实例来完善;

 //Redis的瓶颈最有可能是机器内存的大小或者网络带宽

为什么单线程还这么快?

简介

原因如下
  1. 没有多线程竞争锁的性能消耗。
  2. 没有多线程导致的切换而消耗CPU。
  3. I/O多路复用(非阻塞I/O):Redis采用epoll做为I/O多路复用技术的实现,再加上Redis自身的事件处理模型将epoll中的连接,读写,关闭都转换为了事件,不在I/O上浪费过多的时间。

IO多路复用

简介

        Redis 采用网络IO多路复用技术来保证在多连接的时候, 系统的高吞吐量。

        多路:指的是多个socket连接,复用:指的是复用一个线程。采用多路I/O复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗)。

        多路复用主要有三种技术:select,poll,epoll。epoll是最新的也是目前最好的多路复用技术,Redis使用的epoll(Netty也是用的这个)。

        Redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 Redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,根据 socket 上的事件来选择对应的事件处理器进行处理。

文件事件处理器的结构包含 4 个部分:

  1. 多个 socket
  2. IO 多路复用程序
  3. 文件事件分派器
  4. 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)

处理流程 

        多个 socket 可能会并发产生不同的操作,每个操作对应不同的文件事件,但是 IO 多路复用程序会监听多个 socket,会将 socket 产生的事件放入队列中排队,事件分派器每次从队列中取出一个事件,把该事件交给对应的事件处理器进行处理。

来看客户端与 redis 的一次通信过程

Redis原理--速度快其他网址Redis为什么速度很快Redis单线程的优缺点为什么单线程还这么快?

继续阅读