用戶端可以通過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網站。