单线程的 Redis,不是快吗?为何须要链接池?

点击上方“业余草”,选择“置顶公众号”redis

第一时间获取技术干货和业界资讯!算法


☞ 免费CSDN资料帮下服务 | 免费加群 ☜数据库

近一位大佬,工号粉丝好几万了。拉了好几个微信交流群,我也在其中一个,群里大多数人都不说话,说话的都是“红包”等广告!服务器

一大早都忙着抢各类红包,因而,我就在群里问了一下你们!单线程的 Redis,不是快吗?为何须要链接池?有知道的吗?微信

而后,我就静静地等。没一我的回答问题,多是问题太简单了吧!惟一的一个网友,回了一个表情:你好过度我必定要截屏发给马化腾让他封你号!网络

这就是我一再强调为何群里不能发广告的缘由,一发就不可收拾了,就真的成了广告群了,没人交流了!并发

下面,我就这个问题,说一下个人我的理解。app

先说一下,Redis 为何是单线程的?

由于 CPU 不是 Redis 的瓶颈。Redis 的瓶颈最有多是机器内存或者网络带宽。(以上主要来自官方 FAQ)既然单线程容易实现,并且 CPU 不会成为瓶颈,那就瓜熟蒂落地采用单线程的方案了。关于 redis 的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求,参见:How fast is Redis?框架

另外,也能够参考我去年 8 月份的一篇文章《Redis 是单线程结构,但为什么单线程还能支持高并发?》。高并发

为何使用链接池?

Redis 是单进程单线程的,它利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。

Redis 是基于内存的数据库,使用以前须要创建链接,创建断开链接须要消耗大量的时间。

再假设 Redis 服务器与客户端分处在异地,虽然基于内存的 Redis 数据库有着超高的性能,可是底层的网络通讯却占用了一次数据请求的大量时间,由于每次数据交互都须要先创建链接,假设一次数据交互总共用时 30ms,超高性能的 Redis 数据库处理数据所花的时间可能不到 1ms,也便是说前期的链接占用了 29ms,链接池则能够实如今客户端创建多个链接而且不释放,当须要使用链接的时候经过必定的算法获取已经创建的链接,使用完了之后则还给链接池,这就免去了数据库链接所占用的时间。

注意,这行代码。咱们从 JedisPool 中获取的仅仅是一个链接。至于多个链接到达单进程单线程的 Redis 以后怎么处理,就与你的线程池无关了。

实际上,Redis 在收到多个链接后,采用的是非阻塞 IO,基于 epoll 的多路 IO 复用。

而后采用队列模式将并发访问变为串行访问,对于串行访问,自己操做内存就很快,Redis 采用一个线程来处理就再正常不过了!

10T技术资源大放送!包括但不限于:C/C++,Linux,Python,Java,PHP,人工智能,GO等等。在公众号内回复对应关键字或框架名字,便可免费获取!!

 你再主动一点点   咱们就有故事了

本文分享自微信公众号 - 业余草(yyucao)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索