redis是单线程还是多线程?为什么redis那么快?

发布时间 2023-05-31 15:10:13作者: 未知用户9521

redis是单线程的。

官方表示,Redis是基于内存操作,CPU不是Redis性能瓶颈,Redis的瓶颈是根据机器的内存和网络带宽,既然可以使用单线程来实现,就使用单线程了!

Redis 为什么单线程还这么快 ?

1、误区1:高性能的服务器一定是多线程的 ?
2、误区2:多线程一定比单线程效率高?

多线程需要cpu调度,操作需要消耗系统资源,而单线程则不需要。

  • 基于内存存储实现
    Redis是基于内存操作,内存读写是比在磁盘快很多的,Redis基于内存存储实现的数据库,相对于数据存在磁盘的MySQL数据库,省去磁盘I/O的消耗。
  • 高效的数据结构
    Mysql索引为了提高效率,选择了B+树的数据结构。其实合理的数据结构,可以让应用程序更快。redis的高性能与其存储类型的数据结构有很大的关系。
  • 合理的数据编码
    Redis 支持多种数据数据类型,每种基本类型,可能对多种数据结构。什么时候,使用什么样数据结构,使用什么样编码,是redis设计者总结优化的结果。
  • 合理的线程模型

    Redis是单线程模型的,而单线程避免了CPU不必要的上下文切换和竞争锁的消耗。也正因为是单线程,如果某个命令执行过长(如hgetall命令),会造成阻塞。

    Redis是面向快速执行场景的数据库。所以要慎用如smembers和lrange、hgetall等命令。 Redis 6.0 引入了多线程提速,它的执行命令操作内存的仍然是个单线程。

  • 虚拟内存机制
    Redis直接自己构建了VM机制 ,不会像一般的系统会调用系统函数处理,会浪费一定的时间去移动和请求。