02-1 redis的单线程架构

本文解析了Redis如何通过单线程架构和IO多路复用技术实现高效的数据访问。介绍了Redis使用单线程处理客户端请求的过程,并解释了其快速响应的原因,包括纯内存访问和非阻塞IO的特点。
  • 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是面向快速执行场景的数据库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值