當前位置:
首頁 > 知識 > 同時支持同步和非同步的redis client lib

同時支持同步和非同步的redis client lib

一、同步模式

A -> B

A <- B

A請求,並獲取結果,經歷1個RTT,這裡稱之為同步模式。

為了實現高QPS,需要M個AB來處理任務,這樣可以得到一個公式:M/RTT。

二、非同步模式

A -> -> -> B

A <- <- <- B

A請求,不等待應答繼續請求,並獲取全部結果,經歷1個RTT,這裡稱之為非同步模式。

為了實現高QPS,同樣可以得到一個公式:C,C表示發包頻率。

三、複雜度

非同步模式一般使用回調,較同步方式複雜的多。但GoRedis-Async提供的兩種模式的使用是一樣的。

conn := pool.Get()

ret, err := conn.Do()

doSomething(ret)<code> </code>

當你想在兩種模式下切換時,這些代碼都不用更改。

值得注意的是pipelining,同步模式的使用如下

conn.Send(A)

conn.Send(B)

conn.Flush()

conn.Recive()//ret<-Aconn.Recive()//ret<-B

而非同步模式是天然支持pipelining的,所以使用還是

conn.Do(A)

conn.Do(B)

有時你會希望同時向Redis serverA,B,C請求,最後一次性來處理結果。同步模式的使用如下

同時支持同步和非同步的redis client lib

非同步模式使用如下

同時支持同步和非同步的redis client lib

四、擴展性

同步模式:M/RTT

在GoRedis-Async里,M表示

Pool.MaxActive

這個值是固定的,取決於當前測試環境:

  1. 應用程序和Redis server的網路RTT

  2. 應用程序里的並發度

  3. Redis server的連接數上限

  4. 本機的連接數上限

  5. 本機的CPU核數。

舉個關於RTT的例子:

測試環境的網路RTT為1ms,應用程序經測試達到QPS要求後,M被確定到代碼中,然後上線到生產環境,而生產環境的RTT為10ms,那麼生產環境的QPS就會比預期要低10倍。或者在生產環境里,由於目標Redis
server發生故障而被切到了備機,此時備機和應用程序極有可能會跨機房,這也會帶來同樣的問題。

五、非同步模式:C

在GoRedis-Async里,C只和應用程序的routine數量有關,上邊所述的RTT問題在非同步模式下並不存在。

當然,在特定範圍內都可以被應用程序接受的話,同步和非同步模式選擇哪種都是適合的。

MM(Min cost Max payload)

基礎庫好壞的一個重要衡量標準就是MM。

同步模式從理論上來說,相比較非同步模式需要更多的線程和連接資源。下邊是RedisGo-Async、redigo、官方redisclient的對比基準測試報告。Y軸是耗時ms,X軸為各對比庫,測試數據為1千萬條。

同時支持同步和非同步的redis client lib


中公優就業IT培訓,總有你想學的:http://xue.ujiuye.com

勤工儉學計劃,0元學IT!

http://www.ujiuye.com/zt/qgjx/?wt.bd=mmxtt

找工作太難?好漢,讓我助你一臂之力!

http://www.ujiuye.com/zt/jyfc/?wt.bd=mmxtt

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT優就業 的精彩文章:

Qt5.8以上版本編譯Oracle資料庫的OCI驅動教程
Entity Framework Core 2.0 新特性
SSIS 事務處理
Node.js簡介
mybatis 詳解——一級緩存、二級緩存

TAG:IT優就業 |

您可能感興趣

在 Emacs 的 dired 和 tramp 中非同步運行 rsync
callback Promise async await 非同步回調 案例
React中setState 為什麼是非同步的?
Android非同步處理
增量同步mysql資料庫信息到ElasticSearch
蘋果發布Siri捷徑beta 4:已加入iCloud同步
在 Django中使用 Redis和Celery處理非同步任務
Gson+pulltorefer+資料庫+httpurlconnection+非同步(更新)
Linux下如何實現與Internet時間同步
Snapchat發布新款眼鏡Spectacles,可拍照和錄視頻且能同步至ins
如何將 iPhone 上的音樂同步到 Apple Watch?
springmvc使用非同步處理請求
如何在Windows 10上將iPhone同步到iTunes
Python非同步Web編程
NPM酷庫:pify 將非同步函數Promise化
Linux rsync同步文件腳本
Oculus Quest、Oculus Go開始支持雲存檔同步
Your Phone Companion迎來新圖標和蜂窩數據同步
微軟OneDrive macOS版正式支持差異同步
用跳台玩法做io遊戲,Jumpball.io獲蘋果App Store全球同步推薦