近一位大佬,工号粉丝好几万了。拉了好几个微信交流群,我也在其中一个,群里大多数人都不说话,说话的都是“红包”等广告!服务器
一大早都忙着抢各类红包,因而,我就在群里问了一下你们!单线程的 Redis,不是快吗?为何须要链接池?有知道的吗?微信
而后,我就静静地等。没一我的回答问题,多是问题太简单了吧!惟一的一个网友,回了一个表情:你好过度我必定要截屏发给马化腾让他封你号!网络
这就是我一再强调为何群里不能发广告的缘由,一发就不可收拾了,就真的成了广告群了,没人交流了!并发
下面,我就这个问题,说一下个人我的理解。app
先说一下,Redis 为何是单线程的?
由于 CPU 不是 Redis 的瓶颈。Redis 的瓶颈最有多是机器内存或者网络带宽。(以上主要来自官方 FAQ)既然单线程容易实现,并且 CPU 不会成为瓶颈,那就瓜熟蒂落地采用单线程的方案了。关于 redis 的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求,参见:How fast is Redis?框架
另外,也能够参考我去年 8 月份的一篇文章《Redis 是单线程结构,但为什么单线程还能支持高并发?》。高并发
为何使用链接池?
Redis 是单进程单线程的,它利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。
Redis 是基于内存的数据库,使用以前须要创建链接,创建断开链接须要消耗大量的时间。
再假设 Redis 服务器与客户端分处在异地,虽然基于内存的 Redis 数据库有着超高的性能,可是底层的网络通讯却占用了一次数据请求的大量时间,由于每次数据交互都须要先创建链接,假设一次数据交互总共用时 30ms,超高性能的 Redis 数据库处理数据所花的时间可能不到 1ms,也便是说前期的链接占用了 29ms,链接池则能够实如今客户端创建多个链接而且不释放,当须要使用链接的时候经过必定的算法获取已经创建的链接,使用完了之后则还给链接池,这就免去了数据库链接所占用的时间。