Redis客户端与服务器

2019-08-18  本文已影响0人  老陈的记事本

QUIT 退出服务器

127.0.0.1:6379> quit

请求服务器关闭与当前客户端的连接。
一旦所有等待中的回复(如果有的话)顺利写入到客户端,连接就会被关闭。

返回值

总是返回 OK (但是不会被打印显示,因为当时 Redis-cli 已经退出)。

SHUTDOWN [SAVE|NOSAVE] 关闭redis服务

可用版本: >= 1.0.0
时间复杂度: O(N),其中 N 为关机时需要保存的数据库键数量。

SHUTDOWN命令执行以下操作:

如果持久化被打开的话, SHUTDOWN 命令会保证服务器正常关闭而不丢失任何数据。

另一方面,假如只是单纯地执行SAVE命令,然后再执行 QUIT命令,则没有这一保证 —— 因为在执行SAVE之后、执行QUIT之前的这段时间中间,其他客户端可能正在和服务器进行通讯,这时如果执行 QUIT 就会造成数据丢失。

SAVE 和 NOSAVE 修饰符

通过使用可选的修饰符,可以修改SHUTDOWN命令的表现。比如说:

返回值

执行失败时返回错误。 执行成功时不返回任何信息,服务器和客户端的连接断开,客户端自动退出。

代码示例

D:\Program Files\Redis>redis-cli
127.0.0.1:6379> SHUTDOWN SAVE
not connected>

INFO [section]

可用版本: >= 1.0.0

时间复杂度: O(1)

以一种易于解释(parse)且易于阅读的格式,返回关于 Redis 服务器的各种信息和统计数值。

通过给定可选的参数 section ,可以让命令只返回某一部分的信息:

除上面给出的这些值以外, section 参数的值还可以是下面这两个:

当不带参数直接调用 [INFO]命令时,使用 default 作为默认参数。

Note

不同版本的 Redis 可能对返回的一些域进行了增加或删减。

因此,一个健壮的客户端程序在对 INFO [section] 命令的输出进行分析时,应该能够跳过不认识的域,并且妥善地处理丢失不见的域。

TIME 返回时间戳

可用版本: >= 2.6.0
时间复杂度: O(1)

返回当前服务器时间。

返回值

一个包含两个字符串的列表: 第一个字符串是当前时间(以 UNIX 时间戳格式表示),而第二个字符串是当前这一秒钟已经逝去的微秒数。

代码示例

127.0.0.1:6379> time
1) "1566091734"
2) "606249"

CLIENT SETNAME 设置连接名称

可用版本: >= 2.6.9
时间复杂度: O(1)

为当前连接分配一个名字。

这个名字会显示在 CLIENT LIST 命令的结果中, 用于识别当前正在与服务器进行连接的客户端。

举个例子, 在使用 Redis 构建队列(queue)时, 可以根据连接负责的任务(role), 为信息生产者(producer)和信息消费者(consumer)分别设置不同的名字。

名字使用 Redis 的字符串类型来保存, 最大可以占用 512 MB 。 另外, 为了避免和 CLIENT LIST命令的输出格式发生冲突, 名字里不允许使用空格。

要移除一个连接的名字, 可以将连接的名字设为空字符串 ""

使用 CLIENT GETNAME 命令可以取出连接的名字。

新创建的连接默认是没有名字的。

Tip

在 Redis 应用程序发生连接泄漏时,为连接设置名字是一种很好的 debug 手段。

返回值

设置成功时返回 OK

CLIENT GETNAME 获取连接名称

可用版本: >= 2.6.9
时间复杂度: O(1)
返回 CLIENT SETNAME 命令为连接设置的名字。

因为新创建的连接默认是没有名字的, 对于没有名字的连接, CLIENT GETNAME 返回空白回复。

127.0.0.1:6379> client setname chen-redis
OK
127.0.0.1:6379> client getname
"chen-redis"

CLIENT LIST

可用版本: >= 2.4.0
时间复杂度: O(N) , N 为连接到服务器的客户端数量。
以人类可读的格式,返回所有连接到服务器的客户端信息和统计数据。

redis> CLIENT LIST
addr=127.0.0.1:43143 fd=6 age=183 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
addr=127.0.0.1:43163 fd=5 age=35 idle=15 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=ping
addr=127.0.0.1:43167 fd=7 age=24 idle=6 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get

返回值

命令返回多行字符串,这些字符串按以下形式被格式化:

以下是域的含义:

客户端 flag 可以由以下部分组成:

文件描述符事件可以是:

Note

为了 debug 的需要,经常会对域进行添加和删除,一个安全的 Redis 客户端应该可以对 CLIENT LIST 的输出进行相应的处理(parse),比如忽略不存在的域,跳过未知域,诸如此类。


CLIENT KILL ip:port

可用版本: >= 2.4.0
时间复杂度: O(N) , N 为已连接的客户端数量。

关闭地址为 ip:port 的客户端。
ip:port 应该和 CLIENT LIST 命令输出的其中一行匹配。

因为 Redis 使用单线程设计,所以当 Redis 正在执行命令的时候,不会有客户端被断开连接。

如果要被断开连接的客户端正在执行命令,那么当这个命令执行之后,在发送下一个命令的时候,它就会收到一个网络错误,告知它自身的连接已被关闭。

返回值

当指定的客户端存在,且被成功关闭时,返回 OK

代码示例

# 列出所有已连接客户端
redis 127.0.0.1:6379> CLIENT LIST
addr=127.0.0.1:43501 fd=5 age=10 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
# 杀死当前客户端的连接
redis 127.0.0.1:6379> CLIENT KILL 127.0.0.1:43501
OK
# 之前的连接已经被关闭,CLI 客户端又重新建立了连接
# 之前的端口是 43501 ,现在是 43504
redis 127.0.0.1:6379> CLIENT LIST
addr=127.0.0.1:43504 fd=5 age=0 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=32768 obl=0 oll=0 omem=0 events=r cmd=client
上一篇 下一篇

猜你喜欢

热点阅读