Redis线程模型
大约 1 分钟
Redis线程模型
介绍一下Redis的线程模型
Redis 采用单线程模型的设计。在 Redis早期版本中,所有客户端的请求都是由一个线程来处理的,这个单线程进行网络IO和键值对的读写。持久化、集群等等机制其实是有后台线程执行的。在Redis6.0之后,由于我们对Redis性能有了更高的要求,而Redis单线程执行命令的瓶颈在网络IO,虽然Redis采用IO多路复用模型,但本质还是同步IO,就是将数据从内核拷贝到用户空间这一步是同步的,所以Redis6.0引入了多线程处理网络请求的方式,对于执行命令,Redis仍然采用单线程。
为什么Redis一直采用单线程来执行命令?
- Redis的操作性能瓶颈主要不是CPU导致的
- 使用单线程模型,代码简便的同时也减少了线程上下文切换带来的性能开销
- 并且,Redis 在单线程的情况下,使用I/O多路复用模型,提高了Redis的I/O利用率
讲一讲Redis中的I/O多路复用模型
IO多路复用是指在一个线程中同时监听多个文件描述符,一旦某个文件描述符就绪,就立即处理对应的事件。在 Redis 中,采用的是基于 epoll 的IO多路复用技术,既能充分利用CPU 的计算能力,又能够保证足够的IO处理能力。