Redis 是个单线程程序!这点必须铭记。
正因为 Redis 是单线程,所以要小心使用 Redis 指令,对于那些时间复杂度为 O(n) 级别的指令,一定要谨慎使用,一不小心就可能会导致 Redis 卡顿。这里需要注意的是,redis对外的网络请求服务是单线程的,但是其内部其他模块还是多线程的操作。
Redis 单线程为什么还能这么快?
因为它所有的数据都在内存中,所有的运算都是内存级别的运算,内存结构的特点决定了它的高性能特点。
Redis 单线程如何处理那么多的并发客户端连接?
那为什么能处理那么多的高并发客户端连接?(qps 可以达到5w,Mysql qps可以达到2000)Redis是单线程的,多个链接过去还是单线程处理,但Redis的瓶颈并不在处理上,而是网络传输,连接池多个连接并发发送过去的请求可以大大加快网络通信的效率,再加上Redis使用Linux底层多路I/O复用模型,才是Redis高吞吐量的精髓所在。
Redis会将每个客户端关联到两个队列,指令队列和响应队列。客户端的指令会通过指令队列来顺序处理,先到的客户端指令先处理。Redis服务器通过响应队列来将指令的返回结果给到客户端。