在6.0版本之前,在socket连接建立之后,io处理如socket读取和socket的写入采用的是单线程,过程如下,可以理解为“开发的人只有一个,但负责上线的人也只有一个”
在6.0版本之后,io处理如socket读取阶段的解析和写入socket采用的是多线程,但在执行操作的时候采用的还是单线程,其过程如下,可以理解为“有很多人开发,但负责上线的人就只有一个”,之所以在执行操作时只保留一个线程,是因为这个阶段通常是进行业务处理,可能会涉及到事务操作,涉及到对共有变量的操作,这个时候就必须要用到锁,高并发的数据结构,否则会有安全问题,这样可能会影响io的执行效率,所以为了维持平衡,只将socket的读取,解析,写入这些非业务处理用多线程,具体的执行操作采用单线程;注意在io的一主多从的模型当中,执行操作也是用的多线程;这两个是有区别的;
在redis.conf文件中,可以配置网络io的线程数量,默认为4个,另外也可以启动网络io线程,默认关闭的;
Redis性能主要决定因素:网络io,cpu核心数,内存