本文將給大家分享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.wangchenghua.com/post/8419/
- 轉載請注明:轉載必須在正文中標注并保留原文鏈接
- 掃碼: 掃上方二維碼獲取免費視頻資料