单线程模型
Redis只使用一个线程,用来处理所有的命令请求。
严格来说, Redis Server是多线程的, 只是它的请求处理整个流程是单线程处理的。 这一点我们一定要清楚了解到,不要单纯地认为Redis Server是单线程的。
redis 能够使用单线程模型很好的工作,原因主要在于 redis 的核心业务逻辑,都是短平快的,
不太消耗 cpu 资源,也就不太吃多核了。
弊端在于:redis如果某个操作占用时间长,就会阻塞其他命令的执行。
Redis虽然是单线程模型,但是效率很高,速度很快,这是为什么?(作为对比,参照物是mysql,oracle,sql,server)
- redis访问内存,数据库访问硬盘。速度差别非常大。
- redis的核心功能,相对于数据库来说更简单。数据库对于数据的插入删除査询,都有更复杂的功能支持。这样的功能势必要花费更多的开销。
比如:针对插入删除,数据库中的各种约束,都会使数据库做额外的工作。 - 单线程模型,避免的很多不必要的线程竞争开销。redis每个操作都是短平快的,简单操作一下,不太消耗cpu,就算搞多线程,也提升不大。
- 处理网络IO的时候,用到了epoll这样的IO多路复用机制
Redis单线程的缺点
如果前一个请求发生耗时比较久的操作,那么整个Redis都会被堵塞,其他请求也无法进来。直到这个操作完成操作,其他操作才能进行。