Redis客户端(client)令

7个月前 (04-28)
Redis 提供了一些操作客户端(client)的令,比如查询所有已连接到服务器的客户端数量,控制客户端的连接状态(关闭或者挂起)等。通过客户令我们可以轻松的实现对客户端的管理、控制。

Redis 服务器通过 TCP 端口的方式来接受客户端的连接。当一个连接建立后,Redis 会自动执行以下过程:

  • 首先客户端 socket 被设置为非阻塞模式,这是因为 Redis 在网络事件处理上采用了非阻塞式 IO(即 IO 多路复用模型);

  • 其次设置 socket 的 TCP_NODELAY 属性,从而禁用 Nagle 算法;

  • 创建一个可读的文件事件,用它来客户端 socket 的数据发送。


Redis 使用令的格式向客户端输入数据,这个数据量是非常小的。当向客户端输入令后,我们希望能快速的得到服务器的应答,也就是低延时性,但如果开启了Nagle算法就会出现频繁延时的现象,导致用户体验极差。

TCP_NODELAY 控制是否开启 Nagle 算法,该算法可以提高广域网传输效率,减少分组的报文个数,适传输体量较大的数据。

Redis IO多路复用

Redis 的底层是一个单线程模型,单线程指的是使用一个线程来处理所有的网络事件请求,这样就避免了多进程或者多线程切换导致的 CPU 消耗,而且也不用考虑各种锁的问题。

Redis 为了充分利用单线程,加快服务器的处理速度,它采用 IO 多路复用模型来处理客户端与服务端的连接,这种模型有三种实现方式,分别是 select、poll、epoll。Redis 正是采用 epoll 的方式来监控多个 IO 事件。当客户端空闲时,线程处于阻塞状态;当一个或多个 IO 事件触发时(客户端发起网路连接请求),线程就会从阻塞状态唤醒,并同时使用epoll来轮询触发事件,并依次提交给线程处理。

注意:“多路”指的是多个网络连接,“复用”指的是复用同一个线程。多路 IO 复用技术可以让单个线程高效的处理多个连接请求。

客户端连接数

在 Redis 配置文件中,有一个maxclients的配置项,它指定了连接到 Redis 服务器的客户端数量。其默认值是 10000。配置项如下所示:

127.0.0.1:6379> config get maxclients

1) "maxclients"

2) "10000"

#更改连接数量

127.0.0.1:6379> config set maxclients 20000

OK

127.0.0.1:6379> config get maxclients

1) "maxclients"

2) "20000"

常用令

客户端常用令

说明

CLIENT LIST

以列表的形式返回所有连接到 Redis 服务器的客户端。

CLIENT SETNAME

设置当前连接的名称。

CLIENT GETNAME

获取通过 CLIENT SETNAME 令设置的服务名称。

CLIENT PAUSE

挂起客户端连接,将所有客户端挂起指定的时间(以毫秒为计算)。

CLIENT KILL

关闭客户端连接。

CLIENT ID

返回当前客户端 ID。

CLIENT REPLY

控制发送到当前连接的回复,可选值包括 on|off|skip。

令应用应用

下面看一组简单的使用示例,如下所示:

127.0.0.1:6379> CLIENT ID

(integer) 2557

127.0.0.1:6379> CLIENT LIST

id=2556 addr=127.0.0.1:64684 fd=30 name= age=2422 idle=339 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=client

id=2557 addr=127.0.0.1:49502 fd=43 name= age=537 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 obl=0 oll=0 omem=0 events=r cmd=client

127.0.0.1:6379> CLIENT REPLY ON

OK

127.0.0.1:6379> CLIENT SETNAME "www.biancheng网站站点" rel="nofollow" />