redis单线程模型

单线程模型工作原理

alt text

如上图所示:当两个redis客户端同时向redis服务器发起请求,处理同一个key时。当前这两个客户端,也相当于并发的发起了上述请求。此时就意味着服务器这里会出现线程安全的问题呢?

并不会!redis服务器实际上是单线程模型,保证了当前收到的这多个请求是串行执行的!多个请求同时到达redis服务器,也是要在队列中排队。在等待redis服务器一个一个的去处里面的命令再执行。微观上讲,redis服务器是串行/顺序执行多个命令的!

所以如果某个操作占用时间长,就会阻塞其他命令的执行!

redis虽然是单线程模型,为啥效率这么高呢?速度这么快呢?

首先:redis快的参照物是mysql

  1. redis访问内存:数据块则是访问硬盘
  2. redis核心功能:比数据库的核心功能更简单。数据库对于数据的插入删除查询,都有更复杂的功能支持,这样的功能势必要花费更多的开销。比如,针对插入删除,数据块中的各种约数,都会使数据块做额外的工作。
  3. redis单线程模型:避免了一些不必要的线程竞争开销。redis的每个基本操作都是短平快的,就是简单操作一下内存数据,不是什么特别消耗CPU的操作。就算搞多个线程,也提升不大。
  4. redis处理网络IO的时候,使用了epoll这样的IO多路复用机制。