redis单线程理解

redis是单线程程序.

1.单线程的redis为何如此之快

redis的数据都在内存中,所有的运算都是内存级别的运算。

使用Redis指令时,对于时间复杂度为O(n)级别的指令,一定要谨慎使用,一不小心就可能会导致Redis卡顿。

2.单线程的redis如何处理并发客户端的连接

  • 多路复用技术处理客户端连接
  • 非阻塞 IO处理数据的读写
  • 指令队列:Redis 会将每个客户端套接字都关联一个指令队列。客户端的指令通过队列来排队进行顺序处理,先到先服务。
  • 响应队列:Redis 同样也会为每个客户端套接字关联一个响应队列。Redis 服务器通过响应队列来将指令的返回结果回复给客户端。 如果队列为空,那么意味着连接暂时处于空闲状态,不需要去获取写事件。等到队列有数据了,再将描述符放进去。

3.定时任务的处理

Redis 的定时任务会记录在一个称为最小堆的数据结构中。这个堆中,最快要执行的任务排在堆的最上方。

在每个循环周期,Redis 都会将最小堆里面已经到点的任务立即进行处理。处理完毕后,将最快要执行的任务还需要的时间记录下来,这个时间就是select系统调用的timeout参数。因为 Redis 知道未来timeout时间内,没有其它定时任务需要处理,所以可以安心睡眠timeout的时间。

redis单线程理解

相关推荐