为什么redis是单线程模型?

  1. 我们想一下木桶效应,最终的性能是由那个最短木板决定的;cpu的处理速度远高于内存,而redis的父进程运行在内存中不执行IO操作(AOF和RDB的持久化IO是由子进程来完成的);所以此时内存就是木桶效应中的短木板,就是瓶颈
  2. 我们知道引入多线程的目的是为了把比较耗时的任务非阻塞式处理来提高利用率,在内存中处理速度都非常快,比较耗时的任务比较少,没有必要全面引入多线程,只需要像垃圾处理的时候来进行部分引入优化即可
  3. redis的主要性能瓶颈是内存和网络IO, 我们不会因为引入了多线程,内存和网络IO的处理速度就会变快,比较好的方式就是利用集群,分摊压力到是更有效直接的方式。(引入再多线程也解决不了根本矛盾,多线程只能起到锦上添花
  4. 其它部分原因: 引入多线程的同时还会增加性能成本,比如多线程上下文切换,线程安全的开销; 单线程利用多路复用技术,单线程也可以实现并发处理。(次要原因

总结

  1. 总体上redis采用了单线程模型(基于reactor模型),即使redis4.0(多线程清理垃圾,其余都是单线程)和redis6.0(多线程来执行事件处理,命令的执行上依然是单线程)引入多线程后,也是单线程占据主导地位;我们引入多线程的目的主要是对我们redis起到部分优化的作用(多线程并不能解决redis的主要矛盾:内存和网络IO),所以并没有打算使用多线程全面取代单线程
  2. 分片才是解决redis的主要瓶颈的一个重要方向。

你可能感兴趣的:(为什么系列,redis,数据库)