Redis的单线程模型
说Redis是单线程的并不是说Redis服务器进程内部只有一个线程,只是redis只有一个线程去执行全部指令,比如说网络I/O部分采用的有多线程
为什么Redis是单线程模型还能这么快
这里说的快是相对于其他数据库而言,比如MySQL数据库。为什么这么快的原因,主要有以下几点
- Redis访问内存,MySQL访问硬盘。内存的读取效率可比硬盘高好几个数量级。
- Redis的核心功能比MySQL这样的数据库简单很多。当你读取效率快的时候,操作很复杂,其实一样会很慢。因此Redis的核心功能都比较简单,不想MySQL又是联表查询,又是分组,又是过滤…
- 单线程避免了一些不必要的线程竞争开销。Redis都是一些短平快的操作,就简单的操作一下内存数据,不是什么消耗CPU的操作,单线程反而不显劣势。
- 处理网络I/O的时候使用了epoll这样的IO多路复用技术。在执行多个事件的时候,遇到一个事件需要等待,它不会等待这个事件完成后再去执行下一个,而是先去执行下一个。当前面事件完成时会执行一个epoll(事件通知机制/回调机制)告诉它完成了,他去取结果就可以了。就有点像你喜欢吃的菜在不同的饭馆,你今天中午就想都吃,你就是在A家点了,不等它做好就去B家继续点菜,当A家的菜做好的时候,老板会叫你,说做好了,你再去付款拿走,这样可以节约很多时间。