標籤:串連 時間 content bsp 總結 url hidden 遠程 lap
如何解決redis高並發用戶端頻繁time out?現在業務上每天有5億+的請求,平時redis的操作在2K+每秒左右。到了高峰有3K+,這時候用戶端就會頻繁的報connect time out的異常。
但是,資料上說redis可以達到10W每秒。3K遠遠不到w這個層級啊,請問有什麼建議最佳化現在的情況嗎?答:redis串連數有多少?是否超過了max open files的限制?
直接top看看redis是否跑滿CPU等等。
還有逾時時間配置多少等等。
答:你可以把你應用的部署環境描述下,使用什麼樣的用戶端,長串連還是短串連,redis是單機環境還是叢集環境,redis是否配置了持久化,什麼樣的持久化方式,還有就是redis伺服器的硬體設施,把這些描述清楚然後再分析原因。 最近剛在一個大型活動中大量使用了Redis,前幾次線上高並發類比的確出現了類似題主的問題。修正方式有二:
1.伺服器對TCP和HTTP的限制(直接拒絕或逾時)
2.Redis對並發數的限制(maxclients參數,Once the limit is reached Redis will close all the new connections sending an error ‘max number of clients reached‘.)
對了,我的平台是Windows+.Net+Redis(ServiceStack)
Redis的單線程屬性
Redis 使用了單線程的設計, 意味著單線程服務於所有的用戶端請求,使用一種複用的技術。這種情況下redis可以在任何時候處理單個請求, 所以所有的請求是順序處理的。這和Node.js的工作方式很像, 所有的產出通常不會有慢的感覺,因為處理單個請求的時間非常短,但是最重要的是這些產品被設計為非阻塞系統調用,比如從通訊端中讀取或寫入資料。
我提到過Redis從2.4版本後幾乎是單線程的,我們使用線程在後台運行一些效率低下的I/O操作, 主要關係到硬碟I/O,但是這不改變Redis使用單線程處理所有請求的事實。
總結:就是reids本身效能沒有問題,處理並發能力ok,就是跨伺服器遠端存取其他伺服器reids時,並發大了,網路延遲等,會出現取reids卡死。
redis其他問題