3.官方優化建議3.1網路延遲

玄學醬發表於2018-03-01
客戶端可以通過TCP/IP或Unix域Socket連線到Redis。通常在千兆網路環境中,TCP/IP網路延遲是200us(微秒),Unix域Socket可以低到30us。關於Unix域Socket(Unix Domain Socket)還是比較常用的技術,具體請參考Nginx+PHP-FPM的域Socket配置方法
什麼是域Socket? 
維基百科:“Unix domain socket 或者 IPCsocket 是一種終端,可以使同一臺作業系統上的兩個或多個程式進行資料通訊。與管道相比,Unix domain sockets 既可以使用位元組流數和資料佇列,而管道通訊則只能通過位元組流。U**nix domain sockets的介面和Internet socket很像,但它不使用網路底層協議來通訊。Unix domain socket的功能是POSIX作業系統裡的一種元件。Unix domain sockets使用系統檔案的地址來作為自己的身份。它可以被系統程式引用。所以兩個程式可以同時開啟一個Unix domain sockets來進行通訊。不過這種通訊方式是發生在系統核心裡而不會在網路裡傳播**。”
網路方面我們能做的就是減少在網路往返時間RTT(Round-Trip Time)。官方提供了以下一些建議:
  • 長連線:不要頻繁連線/斷開到伺服器的連線,儘可能保持長連線(Jedis現在就是這樣做的)。
  • 域Socket:如果客戶端與Redis服務端在同一臺機器上的話,使用Unix域Socket。
  • 多引數命令:相比管道,優先使用多引數命令,如mset/mget/hmset/hmget等。
  • 管道化:其次使用管道減少RTT。
  • LUA指令碼:對於有資料依賴而無法使用管道的命令,可以考慮在Redis服務端執行LUA指令碼。
本文作者:geelou
本文來自雲棲社群合作伙伴rediscn,瞭解相關資訊可以關注redis.cn網站。


相關文章