首先redis是单线程的,但是当我多个同时连接redis时是不是要排队吗?然后执行命令,和我们执行单个全局连接直接去一个执行redis指令,感觉差不多吗?
此言差异,虽然redis是单线程的,但这并不表示使用连接池不能提高效率,只是不能通过多线程的方式提高效率。
redis连接池单连接的效能提高很多,要了解为什么redis连接池能够这么大幅的提高性能,就要了解单连接的性能瓶颈在哪里?
单线程不是redis的性能瓶颈,对redis而言,有两个性能所在,一个是计算机执行命令的速度,另一个是网络通信性。很显然,执行命令速度不是redis的性能瓶颈,通信才是其瓶颈。据我所知,redis每秒可执行10万次,因此,对于客户端将若干条命令传输给redis服务,命令执行时间和通信时间大概是比等于0,将设以1s举例,几条命令传输时间为40ms,而每秒可执行10万条命令,那么这些命令只是花费1ms来执行,其他39ms时间无事可做,等待下一个命令的到来,其中的间隙,造成redis的闲置。
综上,要提高redis的性能,可以降低单位时间内的通信成本,那么连接池就是一个不错的选择。客户端使用连接词+多线程方案,使得redis服务闲置时间降低,极大的提高了服务效率。