redis单线程理解
redis是单线程程序.
1.单线程的redis为何如此之快
redis的数据都在内存中,所有的运算都是内存级别的运算。
使用Redis指令时,对于时间复杂度为O(n)级别的指令,一定要谨慎使用,一不小心就可能会导致Redis卡顿。
2.单线程的redis如何处理并发客户端的连接
- 多路复用技术处理客户端连接
- 非阻塞 IO处理数据的读写
- 指令队列:Redis 会将每个客户端套接字都关联一个指令队列。客户端的指令通过队列来排队进行顺序处理,先到先服务。
- 响应队列:Redis 同样也会为每个客户端套接字关联一个响应队列。Redis 服务器通过响应队列来将指令的返回结果回复给客户端。 如果队列为空,那么意味着连接暂时处于空闲状态,不需要去获取写事件。等到队列有数据了,再将描述符放进去。
3.定时任务的处理
Redis 的定时任务会记录在一个称为最小堆的数据结构中。这个堆中,最快要执行的任务排在堆的最上方。
在每个循环周期,Redis 都会将最小堆里面已经到点的任务立即进行处理。处理完毕后,将最快要执行的任务还需要的时间记录下来,这个时间就是select系统调用的timeout参数。因为 Redis 知道未来timeout时间内,没有其它定时任务需要处理,所以可以安心睡眠timeout的时间。
相关推荐
温攀峰 2020-09-16
王道革 2020-11-25
wangdonghello 2020-11-03
Langeldep 2020-11-16
chenhualong0 2020-11-16
聚合室 2020-11-16
koushr 2020-11-12
MRFENGG 2020-11-11
guoyanga 2020-11-10
fackyou00 2020-11-10
Orangesss 2020-11-03
dongCSDN 2020-10-31
rainandtear 2020-10-30
Quietboy 2020-10-30
liuyulong 2020-10-29
fansili 2020-10-29
温攀峰 2020-10-23
jackbon 2020-10-19