AUTH [username] password

从 1.0.0 开始可用。

时间复杂度: O(N) 其中 N 是为用户定义的密码数量

AUTH 命令在两种情况下验证当前连接:

  1. 如果 Redis 服务器通过requirepass选项受密码保护。
  2. 如果 Redis 6.0 或更高版本的实例正在使用Redis ACL 系统。

Redis 6 之前的 Redis 版本只能理解命令的一个参数版本:

AUTH <password>

此表单仅针对使用设置的密码进行身份验证requirepass。在此配置中,Redis 将拒绝刚刚连接的客户端执行的任何命令,除非连接通过AUTH进行了身份验证。

如果通过 AUTH 提供的密码与配置文件中的密码匹配,服务器将回复OK状态码并开始接受命令。否则,返回错误,客户端需要尝试新密码。

使用 Redis ACL 时,命令应以扩展方式给出:

AUTH <username> <password>

为了使用 ACL 列表(请参阅ACL SETUSER)和官方ACL 指南中定义的连接之一来验证当前连接以获取更多信息。

当使用 ACL 时,命令的单参数形式(仅指定密码)假定隐式用户名是“默认”。

安全须知

由于 Redis 的高性能特性,有可能在很短的时间内并行尝试大量密码,因此请确保生成一个强大且非常长的密码,这样这种攻击是不可行的。生成强密码的一个好方法是通过ACL GENPASS命令。

返回值

如果密码或用户名/密码对无效,则简单的字符串回复或错误。

历史

  • Redis 版本 >= 6.0.0:添加了 ACL 样式(用户名和密码)。

CLIENT CACHING YES|NO

从 6.0.0 开始可用。

时间复杂度: O(1)

OPTIN当在orOPTOUT模式下启用跟踪时,此命令控制连接执行的下一个命令中键的跟踪。请查看 客户端缓存文档以获取背景信息。

当 Redis 启用跟踪时,使用CLIENT TRACKING命令,可以指定OPTINorOPTOUT选项,这样只读命令中的键不会被服务器自动记住,以后失效。当我们处于模式时,我们可以通过在下一个命令 之前OPTIN调用来启用对下一个命令中的键的跟踪。CLIENT CACHING yes类似地,当我们处于OPTOUTmode 并且键被正常跟踪时,我们可以避免使用 跟踪下一个命令中的键CLIENT CACHING no。

基本上,该命令在连接中设置一个状态,该状态仅对下一个命令执行有效,这将修改客户端跟踪的行为。

返回值

简单字符串回复:OK如果参数不是是或否,则返回错误。

CLIENT GETNAME

自 2.6.9 起可用。

时间复杂度: O(1)

CLIENT GETNAME返回由CLIENT SETNAME设置的当前连接的名称。由于每个新连接都在没有关联名称的情况下启动,因此如果未分配名称,则返回空的批量回复。

返回值

批量字符串回复:连接名称,如果未设置名称,则为空批量回复。

CLIENT GETREDIR

从 6.0.0 开始可用。

时间复杂度: O(1)

此命令返回我们将 跟踪通知重定向到的客户端 ID。当使用CLIENT TRACKING启用跟踪时,我们将客户端设置为重定向到。但是,为了避免强制客户端库实现记住重定向到的 ID 通知,此命令的存在是为了改进自省并允许客户端稍后检查重定向是否处于活动状态以及指向哪个客户端 ID。

返回值

整数回复:我们将通知重定向到的客户端的 ID。-1如果未启用客户端跟踪,或者启用0了客户端跟踪但我们没有将通知重定向到任何客户端,则该命令返回。

CLIENT ID

从 5.0.0 开始可用。

时间复杂度: O(1)

该命令只返回当前连接的 ID。每个连接 ID 都有一定的保证:

  • 它从不重复,因此如果CLIENT ID返回相同的数字,调用者可以确定底层客户端没有断开并重新连接连接,但它仍然是相同的连接。
  • ID 是单调递增的。如果一个连接的 ID 大于另一个连接的 ID,则保证第二个连接是稍后与服务器建立的。

此命令与CLIENT UNBLOCK一起特别有用,后者也在 Redis 5 中与CLIENT ID一起引入。检查CLIENT UNBLOCK命令页面以获取涉及这两个命令的模式。

例子

redis> CLIENT ID
ERR Unknown or disabled command 'CLIENT'
redis> 

返回值

整数回复

客户端的 ID。

CLIENT INFO

从 6.2.0 开始可用。

时间复杂度: O(1)

该命令以人类可读的格式返回有关当前客户端连接的信息和统计信息。

回复格式与CLIENT LIST相同,内容仅包含当前客户端的信息。

例子

redis> CLIENT INFO
"id=97381 addr=127.0.0.1:51882 laddr=127.0.0.1:6379 fd=8 name= age=23530 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=20448 argv-mem=10 multi-mem=0 rbs=1024 rbp=0 obl=0 oll=0 omem=0 tot-mem=22298 events=r cmd=client|info user=default redir=-1 resp=2\n"
redis> 

返回值

Bulk string reply:当前客户端的唯一字符串,如CLIENT LIST页面中所述。

CLIENT KILL [ip:port] [ID client-id] [TYPE NORMAL|MASTER|SLAVE|REPLICA|PUBSUB] [USER username] [ADDR ip:port] [LADDR ip:port] [SKIPME yes/no]

自 2.4.0 起可用。

时间复杂度: O(N) 其中 N 是客户端连接数

CLIENT KILL命令关闭给定的客户端连接。该命令支持两种格式,旧格式:

CLIENT KILL addr:port

ip:port应该匹配CLIENT LIST命令(addr字段)返回的行。

新格式:

CLIENT KILL <filter> <value> ... ... <filter> <value>

使用新表单,可以通过不同的属性来杀死客户端,而不是仅仅通过地址来杀死客户端。可以使用以下过滤器:

  • CLIENT KILL ADDR ip:port. 这与旧的三参数行为完全相同。
  • CLIENT KILL LADDR ip:port. 杀死所有连接到指定本地(绑定)地址的客户端。
  • CLIENT KILL ID client-id. 允许通过其独特的ID领域杀死客户。使用CLIENT LIST命令ID检索客户端。
  • CLIENT KILL TYPE type,其中type是normal,master和之一。这将关闭指定类中所有客户端的连接。请注意,阻止进入MONITOR命令的客户端被视为属于该类。replicapubsubnormal
  • CLIENT KILL USER username. 关闭所有使用指定ACL用户名进行身份验证的连接,但如果用户名未映射到现有 ACL 用户,则会返回错误。
  • CLIENT KILL SKIPME yes/no. 默认情况下,此选项设置为yes,即调用该命令的客户端不会被杀死,但是将此选项设置为no也会具有杀死调用该命令的客户端的效果。

可以同时提供多个过滤器。该命令将通过逻辑 AND 处理多个过滤器。例如:

CLIENT KILL addr 127.0.0.1:12345 type pubsub

是有效的,并且只会杀死具有指定地址的 pubsub 客户端。这种包含多个过滤器的格式目前很少有用。

当使用新形式时,命令不再返回OK或错误,而是被杀死的客户端的数量,这可能是零。

CLIENT KILL 和 Redis Sentinel

Redis Sentinel 的最新版本(Redis 2.8.12 或更高版本)使用 CLIENT KILL 来在重新配置实例时杀死客户端,以强制客户端再次与一个 Sentinel 执行握手并更新其配置。

笔记

由于 Redis 的单线程特性,无法在执行命令时终止客户端连接。从客户端的角度来看,连接永远不会在执行命令的过程中关闭。但是,只有在发送下一条命令时,客户端才会注意到连接已关闭(并导致网络错误)。

返回值

当使用三个参数格式调用时:

简单字符串回复:OK如果连接存在且已关闭

使用过滤器/值格式调用时:

整数回复:被杀死的客户端数量。

历史

  • Redis 版本 >= 2.8.12:添加了新的过滤器格式。
  • Redis 版本 >= 2.8.12:ID 选项。
  • Redis 版本 >= 3.2.0:为 TYPE 选项添加了 master 类型。
  • Redis 版本 >= 5.0.0:将 slave TYPE 替换为 replicaslave 仍然支持向后兼容。
  • Redis 版本 >= 6.2.0:LADDR 选项。

CLIENT LIST [TYPE NORMAL|MASTER|REPLICA|PUBSUB] [ID client-id [client-id ...]]

自 2.4.0 起可用。

时间复杂度: O(N) 其中 N 是客户端连接数

CLIENT LIST命令以人类可读的格式返回有关客户端连接服务器的信息和统计信息。

您可以使用可选子命令之一来过滤列表。该TYPE type子命令按客户端的类型过滤列表,其中type是normal、master、replica和之一pubsub。请注意,被MONITOR命令阻止的客户端属于normal该类。

过滤器仅返回 ID 与参数ID匹配的客户端的条目。client-id

返回值

批量字符串回复:一个唯一的字符串,格式如下:

  • 每行一个客户端连接(由 LF 分隔)
  • 每行由一系列property=value由空格字符分隔的字段组成。

以下是字段的含义:

  • id:唯一的 64 位客户端 ID
  • addr:客户端的地址/端口
  • laddr: 本地地址客户端连接的地址/端口(绑定地址)
  • fd: 对应socket的文件描述符
  • name: 客户端使用CLIENT SETNAME设置的名称
  • age:连接的总持续时间(以秒为单位)
  • idle:连接的空闲时间(以秒为单位)
  • flags:客户端标志(见下文)
  • db: 当前数据库 ID
  • sub: 频道订阅数
  • psub: 模式匹配订阅数
  • multi: MULTI/EXEC 上下文中的命令数
  • qbuf: 查询缓冲区长度(0 表示没有待处理的查询)
  • qbuf-free: 查询缓冲区的可用空间(0 表示缓冲区已满)
  • argv-mem:下一个命令的参数不完整(已经从查询缓冲区中提取)
  • multi-mem: 内存被缓冲的多命令用完。在 Redis 7.0 中添加
  • obl: 输出缓冲区长度
  • oll:输出列表长度(当缓冲区已满时,回复在此列表中排队)
  • omem: 输出缓冲内存使用情况
  • tot-mem:此客户端在其各种缓冲区中消耗的总内存
  • events:文件描述符事件(见下文)
  • cmd: 最后一个命令播放
  • user: 客户端的认证用户名
  • redir:当前客户端跟踪重定向的客户端ID
  • resp: 客户端 RESP 协议版本。在 Redis 7.0 中添加

客户端标志可以是以下组合:

A: connection to be closed ASAP
b: the client is waiting in a blocking operation
c: connection to be closed after writing entire reply
d: a watched keys has been modified - EXEC will fail
i: the client is waiting for a VM I/O (deprecated)
M: the client is a master
N: no specific flag set
O: the client is a client in MONITOR mode
P: the client is a Pub/Sub subscriber
r: the client is in readonly mode against a cluster node
S: the client is a replica node connection to this instance
u: the client is unblocked
U: the client is connected via a Unix domain socket
x: the client is in a MULTI/EXEC context
t: the client enabled keys tracking in order to perform client side caching
R: the client tracking target client is invalid
B: the client enabled broadcast tracking mode 

文件描述符事件可以是:

r: the client socket is readable (event loop)
w: the client socket is writable (event loop)

笔记

定期添加新字段以进行调试。将来可能会删除一些。使用此命令的版本安全的 Redis 客户端应该相应地解析输出(即处理正常丢失的字段,跳过未知字段)。

历史

  • Redis 版本 >= 2.8.12:添加了唯一的客户端 id 字段。
  • Redis 版本 >= 5.0.0:添加了可选的 TYPE 过滤器。
  • Redis 版本 >= 6.2.0:添加了 laddr 字段和可选的 ID 过滤器。

CLIENT NO-EVICT ON|OFF

自 7.0.0 起可用。

时间复杂度: O(1)

CLIENT NO-EVICT命令设置当前连接的客户端驱逐模式。

当打开并配置客户端驱逐时,即使我们高于配置的客户端驱逐阈值,当前连接也会被排除在客户端驱逐过程之外。

关闭时,当前客户端将重新包含在要被驱逐的潜在客户端池中(并在需要时被驱逐)。

有关更多详细信息,请参阅客户端驱逐。

返回值

简单的字符串回复:OK。

CLIENT PAUSE timeout [WRITE|ALL]

自 2.9.50 起可用。

时间复杂度: O(1)

CLIENT PAUSE是一个连接控制命令,能够将所有 Redis 客户端暂停指定的时间量(以毫秒为单位)。

该命令执行以下操作:

  • 它停止处理来自给定模式的普通和发布/订阅客户端的所有挂起命令。但是,与副本的交互将继续正常进行。请注意,客户端在尝试执行命令时会正式暂停,因此服务器端不会为非活动客户端执行任何操作。
  • 但是,它会尽快向调用者返回 OK,因此CLIENT PAUSE命令的执行不会自行暂停。
  • 当指定的时间过去后,所有客户端都被解除阻塞:这将触发暂停期间每个客户端查询缓冲区中累积的所有命令的处理。

客户端暂停目前支持两种模式:

  • ALL: 这是默认模式。所有客户端命令都被阻止。
  • WRITE:客户端仅在尝试执行写入命令时才会被阻止。

对于该WRITE模式,一些命令具有特殊行为:

  • EVAL / EVALSHA:将阻止所有脚本的客户端。
  • PUBLISH:将阻止客户端。
  • PFCOUNT:将阻止客户端。
  • WAIT:确认将被延迟,因此该命令将显示为被阻止。

此命令很有用,因为它可以以受控方式将客户端从 Redis 实例切换到另一个实例。例如,在实例升级期间,系统管理员可以执行以下操作:

  • 使用CLIENT PAUSE暂停客户端
  • 等待几秒钟以确保副本处理来自主服务器的最新复制流。
  • 将其中一个副本变为主副本。
  • 重新配置客户端以连接新的主节点。

从 Redis 6.2 开始,客户端暂停的推荐模式是WRITE. 此模式将停止所有复制流量,可以使用CLIENT UNPAUSE命令中止,并允许重新配置旧主服务器,而不会冒在故障转移后接受写入的风险。这也是集群故障转移期间使用的模式。

对于 6.2 之前的版本,可以在 MULTI/EXEC 块中与命令一起发送CLIENT PAUSE ,以便在客户端被阻塞时获取当前主偏移量。INFO replication这样,可以在副本端等待特定的偏移量,以确保所有复制流都已处理。

从 Redis 3.2.10 / 4.0.0 开始,此命令还可以防止在客户端暂停期间键被逐出或过期。这样,不仅从客户端无法写入的角度来看,而且从内部操作的角度来看,数据集都可以保证是静态的。

返回值

简单字符串回复:如果超时无效,该命令返回 OK 或错误。

历史

  • Redis 版本 >= 3.2.10:客户端暂停也可以防止客户端暂停和键驱逐。
  • Redis 版本 >= 6.2.0:添加了 CLIENT PAUSE WRITE 模式以及 mode 选项。

CLIENT REPLY ON|OFF|SKIP

自 3.2.0 起可用。

时间复杂度: O(1)

有时,客户端完全禁用来自 Redis 服务器的回复可能很有用。例如,当客户端发送fire and forget 命令或执行大量数据加载时,或在不断流式传输新数据的缓存上下文中。在这种情况下,使用服务器时间和带宽将回复发送回客户端,这将被忽略,被认为是浪费。

CLIENT REPLY命令控制服务器是否会回复客户端的命令。可以使用以下模式:

  • ON. 这是服务器对每个命令都返回回复的默认模式。
  • OFF. 在这种模式下,服务器不会回复客户端命令。
  • SKIP. 此模式会跳过命令的回复。

返回值

当使用其中一个OFF或SKIP子命令调用时,不会做出响应。调用时ON:

简单的字符串回复:OK。

CLIENT SETNAME connection-name

自 2.6.9 起可用。

时间复杂度: O(1)

CLIENT SETNAME命令为当前连接分配一个名称。

分配的名称显示在CLIENT LIST的输出中,以便可以识别执行给定连接的客户端。

例如,当使用 Redis 来实现队列时,消息的生产者和消费者可能希望根据他们的角色设置连接的名称。

如果不是 Redis 字符串类型的通常限制 (512 MB),则可以分配的名称长度没有限制。但是,不能在连接名称中使用空格,因为这会违反CLIENT LIST回复的格式。

可以完全删除将其设置为空字符串的连接名称,这不是有效的连接名称,因为它用于此特定目的。

可以使用CLIENT GETNAME检查连接名称。

每个新连接都在没有指定名称的情况下开始。

提示:为连接设置名称是调试由于使用 Redis 的应用程序中的错误而导致的连接泄漏的好方法。

返回值

简单字符串回复:OK如果连接名称设置成功。

CLIENT TRACKING ON|OFF [REDIRECT client-id] [PREFIX prefix [PREFIX prefix ...]] [BCAST] [OPTIN] [OPTOUT] [NOLOOP]

从 6.0.0 开始可用。

时间复杂度: O(1)。一些选项可能会引入额外的复杂性。

此命令启用 Redis 服务器的跟踪功能,用于服务器辅助客户端缓存。

启用跟踪时,Redis 会记住连接请求的密钥,以便在修改此类密钥时发送稍后的失效消息。无效消息在同一连接中发送(仅在使用 RESP3 协议时可用)或在不同连接中重定向(也适用于 RESP2 和 Pub/Sub)。可以使用一种特殊的广播模式,其中参与此协议的客户端接收每个仅订阅给定密钥前缀的通知,而不管他们请求的密钥如何。鉴于参数的复杂性,请参阅主要的客户端缓存文档详情。本手册页仅作为此子命令选项的参考。

为了启用跟踪,请使用:

CLIENT TRACKING on ... options ...

CLIENT TRACKING off该功能将在当前连接的整个生命周期中保持活动状态,除非在某个时间点打开了跟踪。

以下是启用跟踪时修改命令行为的选项列表:

  • REDIRECT : 向指定 ID 的连接发送失效消息。连接必须存在。您可以使用CLIENT ID 获取连接的 ID。如果我们重定向到的连接终止,当处于 RESP3 模式时,启用跟踪的连接将接收tracking-redir-broken推送消息以发出条件信号。
  • BCAST:在广播模式下启用跟踪。在这种模式下,无论连接请求的密钥如何,都会为所有指定的前缀报告失效消息。相反,当广播模式未启用时,Redis 将使用只读命令跟踪获取哪些键,并仅报告此类键的失效消息。
  • PREFIX :对于广播,注册一个给定的键前缀,以便只为以该字符串开头的键提供通知。可以多次给出此选项以注册多个前缀。如果在没有此选项的情况下启用广播,Redis 将为每个键发送通知。您无法删除单个前缀,但可以通过禁用和重新启用跟踪来删除所有前缀。使用此选项会增加O(N 2) 的额外时间复杂度,其中 N 是跟踪的前缀总数。
  • OPTIN:当广播未激活时,通常不跟踪只读命令中的键,除非在CLIENT CACHING yes命令后立即调用它们。
  • OPTOUT:当广播未激活时,通常跟踪只读命令中的键,除非在CLIENT CACHING no命令后立即调用它们。
  • NOLOOP:不要发送有关此连接本身修改的密钥的通知。

返回值

简单字符串回复:OK如果连接成功进入跟踪模式或跟踪模式是否成功禁用。否则返回错误。

CLIENT TRACKINGINFO

从 6.2.0 开始可用。

时间复杂度: O(1)

该命令返回有关当前客户端连接使用服务器辅助客户端缓存功能的信息。

返回值

数组回复:跟踪信息部分及其各自值的列表,具体为:

  • flags:连接使用的跟踪标志列表。标志及其含义如下:
    • off:连接没有使用服务器辅助的客户端缓存。
    • on:为连接启用服务器辅助客户端缓存。
    • bcast:客户端使用广播模式。
    • optin:客户端默认不缓存key。
    • optout:客户端默认缓存key。
    • caching-yes:下一个命令将缓存键(仅与 一起存在optin)。
    • caching-no:下一个命令不会缓存键(仅与 一起存在optout)。
    • noloop:客户端不会收到关于自己修改的密钥的通知。
    • broken_redirect: 用于重定向的客户端 ID 不再有效。
    • redirect:用于通知重定向的客户端 ID,如果没有,则为 -1。
  • prefixes:将通知发送到客户端的键前缀列表。

CLIENT UNBLOCK client-id [TIMEOUT|ERROR]

从 5.0.0 开始可用。

时间复杂度: O(log N) 其中 N 是客户端连接数

此命令可以从不同的连接解除阻塞在阻塞操作中阻塞的客户端,例如BRPOP或XREAD或WAIT。

默认情况下,客户端被解除阻塞,就好像命令超时一样,但是如果传递了一个额外的(和可选的)参数,则可以指定解除阻塞行为,可以是TIMEOUT(默认值)或ERROR。如果指定了ERROR,则行为是解除对客户端的阻塞,并将客户端被强制解除阻塞的事实作为错误返回。具体来说,客户端将收到以下错误:

-UNBLOCKED client unblocked via CLIENT UNBLOCK

注意:当然,通常不保证错误文本保持不变,但错误代码将保持不变-UNBLOCKED。

此命令非常有用,尤其是当我们监控具有有限连接数的许多键时。例如,我们可能希望在不使用超过 N 个连接的情况下使用XREAD监视多个流。然而,在某些时候,消费者进程被告知还有一个流密钥需要监控。为了避免使用更多连接,最好的行为是从池中的一个连接中停止阻塞命令,添加新密钥,然后再次发出阻塞命令。

要获得此行为,请使用以下模式。该进程使用附加的控制连接,以便在需要时发送CLIENT UNBLOCK命令。同时,在对其他连接运行阻塞操作之前,该进程运行CLIENT ID以获取与该连接关联的 ID。当应添加新密钥或不再监视密钥时,通过在控制连接中发送CLIENT UNBLOCK中止相关的连接阻塞命令。阻塞命令将返回并最终可以重新发出。

此示例显示了 Redis 流上下文中的应用程序,但是该模式是一种通用模式,可以应用于其他情况。

例子

Connection A (blocking connection):
> CLIENT ID
2934
> BRPOP key1 key2 key3 0
(client is blocked)

... Now we want to add a new key ...

Connection B (control connection):
> CLIENT UNBLOCK 2934
1

Connection A (blocking connection):
... BRPOP reply with timeout ...
NULL
> BRPOP key1 key2 key3 key4 0
(client is blocked again)

返回值

整数回复,具体来说:

  • 1如果客户端被成功解锁。
  • 0如果客户端没有被阻止。

CLIENT UNPAUSE

从 6.2.0 开始可用。

时间复杂度: O(N) 其中 N 是暂停客户端的数量

CLIENT UNPAUSE用于恢复所有被CLIENT PAUSE暂停的客户端的命令处理。

返回值

简单字符串回复:命令返回OK

ECHO message

从 1.0.0 开始可用。

时间复杂度: O(1)

退货message。

返回值

批量字符串回复

例子

redis> ECHO "Hello World!"
"Hello World!"
redis> 

HELLO [protover [AUTH username password] [SETNAME clientname]]

从 6.0.0 开始可用。

时间复杂度: O(1)

切换到不同的协议,可选择验证和设置连接名称,或提供上下文客户端报告。

Redis 6 及更高版本支持两种协议:旧协议 RESP2 和 Redis 6 引入的新协议 RESP3。RESP3 有一定的优势,因为当连接处于这种模式时,Redis 能够回复更多语义化的回复:例如,HGETALL将返回一个map type,因此客户端库实现不再需要提前知道将数组转换为在将其返回给调用者之前的哈希值。有关 RESP3 的完整报道,请 查看此存储库。

在 Redis 6 中,连接以 RESP2 模式启动,因此实现 RESP2 的客户端不需要更新或更改。短期内没有计划放弃对 RESP2 的支持,但未来版本可能默认为 RESP3。

HELLO总是回复当前服务器和连接属性的列表,例如:版本、加载的模块、客户端 ID、复制角色等。在 Redis 6.2 中不带任何参数调用并且默认使用 RESP2 协议时,回复如下所示:

> HELLO
 1) "server"
 2) "redis"
 3) "version"
 4) "255.255.255"
 5) "proto"
 6) (integer) 2
 7) "id"
 8) (integer) 5
 9) "mode"
10) "standalone"
11) "role"
12) "master"
13) "modules"
14) (empty array)

想要使用 RESP3 模式握手的客户端需要调用HELLO 命令并指定值“3”作为protover参数,如下所示:

> HELLO 3
1# "server" => "redis"
2# "version" => "6.0.0"
3# "proto" => (integer) 3
4# "id" => (integer) 10
5# "mode" => "standalone"
6# "role" => "master"
7# "modules" => (empty array)

因为HELLO回复了有用的信息,并且假设它protover是可选的或可以设置为“2”,所以客户端库作者可以考虑在设置连接时使用此命令而不是规范PING 。

当使用可选protover参数调用时,此命令将协议切换到指定版本并接受以下选项:

  • AUTH :除了切换到指定的协议版本外,直接认证连接。这使得在建立新连接时无需在HELLO之前调用AUTH 。请注意,可以将其设置为“默认”以针对不使用 ACL 的服务器进行身份验证,而是使用Redis 6 之前的更简单机制。usernamerequirepass
  • SETNAME : 这相当于调用CLIENT SETNAME。

返回值

数组回复:服务器属性列表。回复是选中resp3时的映射而不是数组。protover如果请求的不存在,该命令将返回错误。

历史

Redis 版本 >= 6.2.0:protover 变为可选;当不带参数调用时,该命令报告当前连接的上下文。

PING [message]

从 1.0.0 开始可用。

时间复杂度: O(1)

如果没有提供参数,则返回PONG,否则返回参数的副本作为批量。此命令通常用于测试连接是否仍然存在,或测量延迟。

如果客户端订阅了频道或模式,它将改为返回一个多批量,其中第一个位置为“pong”,第二个位置为空批量,除非提供了参数,在这种情况下它返回一个副本的论点。

返回值

简单的字符串回复,特别PONG是在没有提供参数时。

批量字符串回复提供的参数(如果适用)。

例子

redis> PING
"PONG"
redis> PING "hello world"
"hello world"
redis> 

QUIT

从 1.0.0 开始可用。

时间复杂度: O(1)

请求服务器关闭连接。一旦所有待处理的回复都写入客户端,连接就会关闭。

返回值

简单的字符串回复:总是好的。

RESET

从 6.2.0 开始可用。

时间复杂度: O(1)

此命令执行连接的服务器端上下文的完全重置,模仿断开连接并再次重新连接的效果。

当从常规客户端连接调用该命令时,它会执行以下操作:

  • 如果存在,则丢弃当前的MULTI事务块。
  • 取消监视连接编辑的所有键WATCH。
  • 禁用CLIENT TRACKING(如果正在使用)。
  • 将连接设置为READWRITE模式。
  • 如果之前设置,取消连接的ASKING模式。
  • 将CLIENT REPLY设置为ON。
  • 将协议版本设置为 RESP2。
  • SELECTs 数据库 0。
  • 退出MONITOR模式(如果适用)。
  • 在适当的时候中止 Pub/Sub 的订阅状态(SUBSCRIBE和PSUBSCRIBE)。
  • 取消对连接的身份验证,在启用身份验证时需要调用AUTH来重新进行身份验证。

返回值

简单的字符串回复:总是'RESET'。

SELECT index

从 1.0.0 开始可用。

时间复杂度: O(1)

选择具有指定从零开始的数字索引的 Redis 逻辑数据库。新连接始终使用数据库 0。

可选 Redis 数据库是命名空间的一种形式:所有数据库仍然保存在同一个 RDB/AOF 文件中。然而,不同的数据库可以有同名的键,并且像FLUSHDB、SWAPDB或RANDOMKEY这样的命令适用于特定的数据库。

实际上,应该使用 Redis 数据库来分隔属于同一应用程序的不同键(如果需要),而不是为多个不相关的应用程序使用单个 Redis 实例。

使用 Redis Cluster 时,不能使用SELECT命令,因为 Redis Cluster 只支持数据库零。在 Redis 集群的情况下,拥有多个数据库将是无用的,并且是不必要的复杂性来源。Redis 集群的设计和目标不可能在单个数据库上以原子方式操作命令。

由于当前选择的数据库是连接的属性,客户端应该跟踪当前选择的数据库并在重新连接时重新选择它。虽然没有命令可以查询当前连接中的选定数据库,但CLIENT LIST输出为每个客户端显示当前选定的数据库。

返回值

简单的字符串回复