数据存储在内存中,读取的时候不须要进行磁盘的 IOredis
单线程保证了系统没有线程的上下文切换segmentfault
使用单线程,能够避免没必要要的上下文切换和竞争条件,没有多进程或多线程引发的切换和 CPU 的消耗,没必要考虑各类锁的问题,没有锁释放或锁定操做,不会因死锁而下降性能;缓存
Redis 是用 C 语言开发完成的网络
采用多路 I/O 复用技术可让单个线程高效的处理多个网络链接请求(尽可能减小网络 IO 的时间消耗)数据结构
非阻塞 IO 内部实现采用 epoll,采用了 epoll+本身实现的简单的事件框架。epoll 中的读、写、关闭、链接都转化成了事件,而后利用 epoll 的多路复用特性,毫不在 io 上浪费一点时间。多线程
数据结构简单,对数据操做也简单,Redis 中的数据结构是专门进行设计的;框架
多路 I/O 复用模型是利用 select、poll、epoll 能够同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有 I/O 事件时,就从阻塞态中唤醒,因而程序就会轮询一遍全部的流(epoll 是只轮询那些真正发出了事件的流),而且只依次顺序的处理就绪的流,这种作法就避免了大量的无用操做。分布式
这里“多路”指的是多个网络链接,“复用”指的是复用同一个线程。ide
采用多路 I/O 复用技术可让单个线程高效的处理多个链接请求(尽可能减小网络 IO 的时间消耗),且 Redis 在内存中操做数据的速度很是快,也就是说内存内的操做不会成为影响 Redis 性能的瓶颈,主要由以上几点造就了 Redis 具备很高的吞吐量。性能
视频 | IO 多路复用 select/poll/epoll 介绍
我的公众号《骇客与画家》,欢迎关注