近一位大佬,工號粉絲好幾萬了。拉了好幾個微信交流羣,我也在其中一個,羣裏大多數人都不說話,說話的都是「紅包」等廣告!服務器
一大早都忙着搶各類紅包,因而,我就在羣裏問了一下你們!單線程的 Redis,不是快嗎?爲何須要鏈接池?有知道的嗎?微信
而後,我就靜靜地等。沒一我的回答問題,多是問題太簡單了吧!惟一的一個網友,回了一個表情:你好過度我必定要截屏發給馬化騰讓他封你號!網絡
這就是我一再強調爲何羣裏不能發廣告的緣由,一發就不可收拾了,就真的成了廣告羣了,沒人交流了!併發
下面,我就這個問題,說一下個人我的理解。app
先說一下,Redis 爲何是單線程的?
由於 CPU 不是 Redis 的瓶頸。Redis 的瓶頸最有多是機器內存或者網絡帶寬。(以上主要來自官方 FAQ)既然單線程容易實現,並且 CPU 不會成爲瓶頸,那就瓜熟蒂落地採用單線程的方案了。關於 redis 的性能,官方網站也有,普通筆記本輕鬆處理每秒幾十萬的請求,參見:How fast is Redis?框架
另外,也能夠參考我去年 8 月份的一篇文章《Redis 是單線程結構,但爲什麼單線程還能支持高併發?》。高併發
爲何使用鏈接池?
Redis 是單進程單線程的,它利用隊列技術將併發訪問變爲串行訪問,消除了傳統數據庫串行控制的開銷。
Redis 是基於內存的數據庫,使用以前須要創建鏈接,創建斷開鏈接須要消耗大量的時間。
再假設 Redis 服務器與客戶端分處在異地,雖然基於內存的 Redis 數據庫有着超高的性能,可是底層的網絡通訊卻佔用了一次數據請求的大量時間,由於每次數據交互都須要先創建鏈接,假設一次數據交互總共用時 30ms,超高性能的 Redis 數據庫處理數據所花的時間可能不到 1ms,也便是說前期的鏈接佔用了 29ms,鏈接池則能夠實如今客戶端創建多個鏈接而且不釋放,當須要使用鏈接的時候經過必定的算法獲取已經創建的鏈接,使用完了之後則還給鏈接池,這就免去了數據庫鏈接所佔用的時間。