天天看点

3.官方优化建议3.1 网络延迟

客户端可以通过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网站。