此篇主要介绍下Redis是如何实现的高性能。

我们知道,Redis是一个提供了众多数据结构和特性,并且可以达到10w+qps的高性能NoSQL数据库。那么,它是如何做到高性能的呢?

开发语言

基于C语言实现,执行效率因素。

纯内存访问

Redis将所有数据放在内存中,除特殊场景外一般无需访问磁盘,减少了磁盘IO。

单线程

  • 实现简单,避免了线程切换以及加锁释放锁带来的性能消耗。当然,单线程也有阻塞的缺点,需要避免执行耗时过长的命令。

  • 除了Redis之外,Node.js和Nginx也都是单线程高性能服务的典范。

非阻塞多路I/O复用机制(multiplexing)

Redis使用epoll作为I/O多路复用技术的实现,加上Redis自身的事件处理模型将epoll的read、write、close等都转换成事件,不在网络I/O上浪费过多的时间,从而实现对多个文件描述符(File Descriptor,FD)读写的监控,提高了性能。

多路复用函数库

  1. Redis的I/O多路复用机制,还提供了select、epoll(Linux)、evport(Solaries)、kqueue(macOS/FreeBSD)等多路复用函数库,根据编译平台的不同可以选择不同的库。
  2. 除了select方式的时间复杂度为O(N)外,其它几种均为O(1)。