Unity3D热门教程

游戏开发工具

Redis 命令行界面(一)

redis-cli 概述,Redis 命令行界面

Redis 命令行界面 ( redis-cli) 是一个终端程序,用于向 Redis 服务器发送命令并从其读取回复。它有两种主要模式:交互式读取评估打印循环 (REPL) 模式,用户键入 Redis 命令并接收回复,以及redis-cli使用附加参数执行并将回复打印到标准输出的命令模式。

在交互模式下,redis-cli具有基本的行编辑功能,提供熟悉的打字体验。

要以特殊模式启动程序,您可以使用多个选项,包括:

  • 模拟一个副本并打印它从主节点接收到的复制流。

  • 检查 Redis 服务器的延迟并显示统计信息。

  • 请求延迟样本和频率的 ASCII 艺术频谱图。

本主题涵盖 的不同方面redis-cli,从最简单的功能开始,到更高级的功能结束。

#命令行使用

要运行 Redis 命令并在终端返回标准输出,请将要执行的命令作为单独的参数包含redis-cli

$ redis-cli INCR mycounter
(integer) 7


命令的回复是“7”。由于 Redis 回复是类型化的(字符串、数组、整数、nil、错误等),因此您可以在括号之间看到回复的类型。redis-cli当 的输出必须用作另一个命令的输入或重定向到文件时,此附加信息可能并不理想。

redis-cli仅在检测到标准输出是 tty 或终端时才显示附加信息以供人类阅读。对于所有其他输出,它将自动启用原始输出模式,如下例所示:

$ redis-cli INCR mycounter > /tmp/output.txt
$ cat /tmp/output.txt
8


请注意,(integer)输出中省略了 ,因为redis-cli检测到输出不再写入终端。您甚至可以在终端上使用以下--raw选项强制原始输出:

$ redis-cli --raw INCR mycounter
9


您可以在写入文件或在管道中使用--no-raw.

#字符串引用和转义

解析命令时redis-cli,空格字符会自动分隔参数。在交互模式下,换行符发送用于解析和执行的命令。要输入包含空格或不可打印字符的字符串值,您可以使用带引号和转义的字符串。

带引号的字符串值用双 ( ") 或单 ( ') 引号括起来。转义序列用于将不可打印的字符放入字符和字符串文字中。

转义序列包含一个反斜杠 ( \) 符号,后跟一个转义序列字符。

双引号字符串支持以下转义序列:

  • \"- 双引号

  • \n- 新队

  • \r- 回车

  • \t- 水平选项卡

  • \b- 退格

  • \a- 警报

  • \\- 反斜杠

  • \xhh- 任何由十六进制数 ( hh )表示的 ASCII 字符

单引号假定字符串是文字,并且只允许以下转义序列:

  • \'- 单引号

  • \\- 反斜杠

例如,要返回Hello World两行:

127.0.0.1:6379> SET mykey "Hello\nWorld"
OK
127.0.0.1:6379> GET mykey
Hello
World


例如,当您输入包含单引号或双引号的字符串时,例如在密码中可能会转义字符串,如下所示:

127.0.0.1:6379> AUTH some_admin_user ">^8T>6Na{u|jp>+v\"55\@_;OU(OR]7mbAYGqsfyu48(j'%hQH7;v*f1H${*gD(Se'"


转义字符串如上所示。

#主机、端口、密码和数据库

默认情况下,redis-cli使用端口 6379 连接到地址为 127.0.0.1 的服务器。您可以使用多个命令行选项更改端口。要指定不同的主机名或 IP 地址,请使用该-h选项。要设置不同的端口,请使用-p.

$ redis-cli -h redis15.localnet.org -p 6390 PING


如果您的实例受密码保护,该-a <password>选项将执行身份验证,无需显式使用以下AUTH命令:

$ redis-cli -a myUnguessablePazzzzzword123 PING
PONG


**注意:**出于安全原因,请通过环境变量redis-cli自动 提供密码。REDISCLI_AUTH

最后,可以使用以下选项发送对默认数字零以外的数据库编号进行操作的命令-n <dbnum>

$ redis-cli FLUSHALL
OK
$ redis-cli -n 1 INCR a
(integer) 1
$ redis-cli -n 1 INCR a
(integer) 2
$ redis-cli -n 2 INCR a
(integer) 1


也可以使用-u <uri> 选项和 URI 模式提供部分或全部信息redis://user:password@host:port/dbnum

$ redis-cli -u redis://LJenkins:p%40ssw0rd@redis-16379.hosted.com:16379/0 PING
PONG


描述所述如上。

#SSL/TLS

默认情况下,redis-cli使用纯 TCP 连接连接到 Redis。您可以使用该选项启用 SSL/TLS --tls,以及配置受信任的根证书包或目录--cacert。 --cacertdir

--cert如果目标服务器需要使用客户端证书进行身份验证,您可以使用and 指定证书和相应的私钥--key

#从其他程序获取输入

您可以使用两种方法redis-cli通过标准输入接收来自其他命令的输入。一种是使用目标有效负载作为stdin的最后一个参数。例如,要将 Redis 键设置为来自本地文件系统net_services 的文件内容,请使用以下 选项:/etc/services``-x

$ redis-cli -x SET net_services < /etc/services
OK
$ redis-cli GETRANGE net_services 0 50
"#\n# Network services, Internet style\n#\n# Note that "


在上述会话的第一行中,redis-cli使用该选项执行,-x并将文件重定向到 CLI 的标准输入作为满足SET net_services命令短语的值。这对于编写脚本很有用。

另一种方法是提供redis-cli一系列写入文本文件的命令:

$ cat /tmp/commands.txt
SET item:3374 100
INCR item:3374
APPEND item:3374 xxx
GET item:3374
$ cat /tmp/commands.txt | redis-cli
OK
(integer) 101
(integer) 6
"101xxx"


中的所有命令commands.txt都连续执行, redis-cli就好像它们是用户在交互模式下键入的一样。如果需要,可以在文件中引用字符串,以便可以使用带有空格、换行符或其他特殊字符的单个参数:

$ cat /tmp/commands.txt
SET arg_example "This is a single argument"
STRLEN arg_example
$ cat /tmp/commands.txt | redis-cli
OK
(integer) 25


描述如上所述。

#连续运行相同的命令

可以在用户选择的执行之间暂停执行指定次数的单个命令。这在不同的上下文中很有用——例如当我们想要持续监控一些关键内容或INFO字段输出时,或者当我们想要模拟一些重复的写入事件时,比如每 5 秒将一个新项目推送到列表中。

此功能由两个选项控制:-r <count>-i <delay>。该-r选项说明运行命令的次数并-i设置不同命令调用之间的延迟(以秒为单位)(能够指定诸如 0.1 之类的值来表示 100 毫秒)。

默认情况下,间隔(或延迟)设置为 0,因此命令会尽快执行:

$ redis-cli -r 5 INCR counter_value
(integer) 1
(integer) 2
(integer) 3
(integer) 4
(integer) 5

要无限期地运行相同的命令,-1请用作计数值。要随着时间的推移监控 RSS 内存大小,可以使用以下命令:

$ redis-cli -r -1 -i 1 INFO | grep rss_human
used_memory_rss_human:2.71M
used_memory_rss_human:2.73M
used_memory_rss_human:2.73M
used_memory_rss_human:2.73M
... a new line will be printed each second ...


描述如上所述。

#使用大量插入数据redis-cli

大规模插入使用redis-cli在单独的页面中进行了介绍,因为它本身就是一个有价值的主题。请参阅我们的 批量插入指南

#CSV 输出

内部存在 CSV(逗号分隔值)输出功能,redis-cli可将数据从 Redis 导出到外部程序。

$ redis-cli LPUSH mylist a b c d
(integer) 4
$ redis-cli --csv LRANGE mylist 0 -1
"d","c","b","a"


请注意,该--csv标志仅适用于单个命令,而不是作为导出的整个数据库。

#运行 Lua 脚本

redis-cli广泛支持使用 Lua 脚本的调试工具,Redis 3.2 及更高版本提供。有关此功能,请参阅 Redis Lua 调试器文档

即使不使用调试器,redis-cli也可用于从文件运行脚本作为参数:

$ cat /tmp/script.lua
return redis.call('SET',KEYS[1],ARGV[1])
$ redis-cli --eval /tmp/script.lua location:hastings:temp , 23
OK

RedisEVAL命令将脚本使用的键列表和其他非键参数作为不同的数组。呼叫时EVAL,您将键数作为数字提供。

redis-cli使用上述选项调用时--eval,无需明确指定键的数量。相反,它使用用逗号分隔键和参数的约定。这就是为什么在上述调用中您将location:hastings:temp , 23其视为参数。

因此location:hastings:temp将填充 KEYS 数组和数组23ARGV

--eval选项在编写简单脚本时很有用。对于更复杂的工作,推荐使用 Lua 调试器。可以混合使用这两种方法,因为调试器也可以从外部文件执行脚本。

#交互模式

我们已经探索了如何将 Redis CLI 用作命令行程序。这对于脚本和某些类型的测试很有用,但是大多数人会花费大部分时间redis-cli使用它的交互模式。

在交互模式下,用户在提示符下键入 Redis 命令。该命令被发送到服务器,进行处理,然后将回复解析并呈现为更简单的形式以供阅读。

在交互模式下运行不需要什么特别的redis-cli- 只需在没有任何参数的情况下执行它

$ redis-cli
127.0.0.1:6379> PING
PONG

字符串127.0.0.1:6379>是提示符。它显示连接的 Redis 服务器实例的主机名和端口。

当连接的服务器更改或在与数据库编号为零的数据库不同的数据库上操作时,提示会更新:

127.0.0.1:6379> SELECT 2
OK
127.0.0.1:6379[2]> DBSIZE
(integer) 1
127.0.0.1:6379[2]> SELECT 0
OK
127.0.0.1:6379> DBSIZE
(integer) 503


描述如上所述。

#处理连接和重新连接

通过指定我们要连接的主机名端口,在交互模式下使用该CONNECT命令可以连接到不同的实例:

127.0.0.1:6379> CONNECT metal 6379
metal:6379> PING
PONG

如您所见,当连接到不同的服务器实例时,提示会相应更改。如果尝试连接到无法访问的实例,则redis-cli进入断开模式并尝试使用每个新命令重新连接:

127.0.0.1:6379> CONNECT 127.0.0.1 9999
Could not connect to Redis at 127.0.0.1:9999: Connection refused
not connected> PING
Could not connect to Redis at 127.0.0.1:9999: Connection refused
not connected> PING
Could not connect to Redis at 127.0.0.1:9999: Connection refused

一般检测到断线后,redis-cli总是尝试透明重连;如果尝试失败,则显示错误并进入断开连接状态。以下是断开和重新连接的示例:

127.0.0.1:6379> INFO SERVER
Could not connect to Redis at 127.0.0.1:6379: Connection refused
not connected> PING
PONG
127.0.0.1:6379> 
(now we are connected again)

执行重新连接时,会redis-cli自动重新选择最后选择的数据库编号。但是,有关连接的所有其他状态都会丢失,例如在 MULTI/EXEC 事务中:

$ redis-cli
127.0.0.1:6379> MULTI
OK
127.0.0.1:6379> PING
QUEUED

( here the server is manually restarted )

127.0.0.1:6379> EXEC
(error) ERR EXEC without MULTI


在使用交互模式进行测试时,这通常不是问题redis-cli,但应该知道这个限制。

#编辑、历史、补全和提示

因为redis-cli使用linenoise 线编辑库,所以它始终具有线编辑功能,无需依赖libreadline或其他可选库。

可以访问命令执行历史记录,以避免通过按箭头键(向上和向下)重新键入命令。历史记录在 CLI 重新启动之间保存在 .rediscli_history用户主目录内命名的文件中,由HOME环境变量指定。可以通过设置环境变量来使用不同的历史文件名REDISCLI_HISTFILE,并通过将其设置为/dev/null.

也可以通过redis-cli按 TAB 键来执行命令名补全,如下例所示:

127.0.0.1:6379> Z<TAB>
127.0.0.1:6379> ZADD<TAB>
127.0.0.1:6379> ZCARD<TAB>

在提示符处输入 Redis 命令名称后,redis-cli将显示语法提示。redis-cli与命令历史记录一样,此行为可以通过首选项打开和关闭。