02-1 redis的单线程架构

  • redis使用了单线程架构和IO多路复用模型来实现高性能的内存数据访问。

1、单线程模型

  • Redis客户端与服务端的模型可以简化成三个过程:发送命令、执行命令、返回结果
  • 执行命令:
  • 1、由于redis是单线程,每一条到达服务端的命令不会立即执行,所有的命令会进入一个队列中,然后逐个被执行。
  • 2、多个客户端发送命令的执行顺序是不确定的,但是不会有两条命令同时被执行,不会产生并发问题。

2、为什么单线程还这么快

2.1、纯内存访问。

  • redis将所有的数据存放在内存中,内存响应时间比较短。

2.2、非阻塞IO。

  • redis采用epoll作为IO多路复用技术实现,不在IO上浪费时间
  • epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
  • 另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。
  • epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外,还提供了边缘触发(Edge Triggered),这就使得用户空间程序有可能缓存IO状态,减少epoll_wait/epoll_pwait的调用,提高应用程序效率。

3、单线程避免了线程切换和竞态生产的消耗。

  • 单线程的好处:
  • 1、可以简化数据结构和算法的实现
  • 2、单线程减少了锁和线程切换动作

4、redis是面向高速执行的数据库。

  • redis对应每个命令执行的时间有要求,如果某个命令执行时间过长会影响其他命令的阻塞,所以redis是面向快速执行场景的数据库。

猜你喜欢

转载自blog.csdn.net/qq_34231253/article/details/80993823