本文将给大家分享swoole redis连接池的必要性。
首先,redis是单线程的,为什么呢?
因为 CPU 不是 Redis 的瓶颈。Redis 的瓶颈最有可能是机器内存或者网络带宽。(以上主要来自官方 FAQ)既然单线程容易实现,而且 CPU 不会成为瓶颈,那就顺理成章地采用单线程的方案了。关于 redis 的性能,官方网站也有,普通笔记本轻松处理每秒几十万的请求,参见:How fast is Redis?
为什么使用连接池?
Redis 是单进程单线程的,它利用队列技术将并发访问变为串行访问,消除了传统数据库串行控制的开销。
Redis 是基于内存的数据库,使用之前需要建立连接,建立断开连接需要消耗大量的时间。
再假设 Redis 服务器与客户端分处在异地,虽然基于内存的 Redis 数据库有着超高的性能,但是底层的网络通信却占用了一次数据请求的大量时间,因为每次数据交互都需要先建立连接,假设一次数据交互总共用时 30ms,超高性能的 Redis 数据库处理数据所花的时间可能不到 1ms,也即是说前期的连接占用了 29ms,连接池则可以实现在客户端建立多个连接并且不释放,当需要使用连接的时候通过一定的算法获取已经建立的连接,使用完了以后则还给连接池,这就免去了数据库连接所占用的时间。
Jedis resource = jedisPool. getResource();
注意,这行代码。我们从 JedisPool 中获取的仅仅是一个连接。至于多个连接到达单进程单线程的 Redis 之后怎么处理,就与你的线程池无关了。
实际上,Redis 在收到多个连接后,采用的是非阻塞 IO,基于 epoll 的多路 IO 复用。
然后采用队列模式将并发访问变为串行访问,对于串行访问,本身操作内存就很快,Redis 采用一个线程来处理就再正常不过了!
以上就是“一文带你了解swoole redis连接池的必要性”的详细内容,想要了解更多swoole教程欢迎关注编程学习网扫码二维码 获取免费视频学习资料
- 本文固定链接: http://www.phpxs.com/post/8419/
- 转载请注明:转载必须在正文中标注并保留原文链接
- 扫码: 扫上方二维码获取免费视频资料