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" />