一、原因分析
1.redis在处理请求的时候都是纯内存操作; 2.redis处理命令使用了单线程,减少了线程切换的开销; 3.redis内部实现使用了非阻塞的IO多路复用; 4.redis主要基于c语言实现,底层针对不同的数据类型做了不少优化。
二、扩展
1.redis 6.0版本引入了多线程,不过这个多线程是处理IO的时候使用的,在执行命令的时候还是保持单线程,因为redis的瓶颈不是cpu而是内存和IO; 2.redis的IO多路复用底层主要使用epoll模型,epoll模型底层实现使用了红黑树和双向链表,红黑树主要是为了提升文件描述符的快速查找,双向链表用来存储就绪fd的。