Home Redis-CLI
Post
Cancel

Redis-CLI

命令行模式

命令行用法

可以在终端直接运行redis命令,并在标准输出返回结果。example:(INCR命令,即自增1)

1
2
3
4
5
6
$ redis-cli INCR mycount
(integer) 1
$ redis-cli INCR mycount
(integer) 2
$ redis-cli INCR mycount
(integer) 3

redis中的结果是区分类型的,可以在前面的括号中看到返回结果的类型。

redis-cli 是能够检测终端的,如果是标准输出(如上文),会额外补充显示类型以方便阅读。但如果重定向到tty终端,它能检测到, 并自动使用 raw output mode 输出,这点可以很方便的用在脚本中,example:

1
2
3
$ redis-cli INCR mycount > /tmp/output.txt
$ cat /tmp/output.txt 
4

可以看到上面重定向到文件中的输出是没有 (integer)类型提示的。

  • 使用--raw参数可以强制使用raw output mode 输出。
  • 使用--no-raw参数可以强制使用human readable output mode 输出。
1
2
$ redis-cli --raw INCR mycount 
$ redis-cli --no-raw INCR mycount

字符串引号和转义

redis-cli会用空格分隔参数,有时需要在value中输入空格或其他特殊字符,需要使用 双引号单引号 将字符串包围。 这样就可以输入空格或其他转义字符了。

双引号支持的转义字符:

1
2
3
4
5
6
7
8
\" - double-quote
\n - newline
\r - carriage return
\t - horizontal tab
\b - backspace
\a - alert
\\ - backslash
\xhh - any ASCII character represented by a hexadecimal number (hh)

单引号会假定字符串是文字,并只支持以下转义序列:

1
2
\' - single quote
\\ - backslash

Host, port, password, and database

redis-cli 默认连接 127.0.0.1:6379地址的服务器,可以通过 -h-p重新指定server 地址。

1
2
$ redis-cli -h 127.0.0.1 -p 6379 PING
PONG

密码问题

redis-cli连接时,使用 -a参数可以指定明文密码。或通过环境变量REDISCLI_AUTH传递,后者相对安全一些。

切换不同数据库

在redis-cli连上server后,默认使用的是编号为0的数据库,可以指定数据库id切换:

1
2
3
4
5
6
$ redis-cli -n 1 INCR a
(integer) 1
$ redis-cli -n 1 INCR a
(integer) 2
$ redis-cli -n 2 INCR a
(integer) 1

SSL/TLS

默认情况下,redis-cli使用的TCP连接是不加密的。可以使用 --tls选项使能SSL/TLS,并配合使用--cacert or --cacertdir配置证书。

如果目标服务器要求客户端进行身份验证,客户端可以使用 --cert--key指定证书或密码。

从其他程序获取输入

分两种情况,一种是从其他地方获取文本作为整条命令输入,另一种是仅获取文本作为key的value。

作为整体命令输入的:(文本中可以使用双引号,转义字符照常填写支持)

1
2
3
4
5
6
7
8
9
10
$ 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"

另一种仅作为value的,(redis中value是所有命令的最后一个参数,即value值),需要使用-x参数,(Read last argument from STDIN)。

1
2
3
4
$ 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支持连续运行相同命令,比如需要连续监控一些变量的值的场景。

使用参数: -r,-i

1
2
3
  -r <repeat>        Execute specified command N times.
  -i <interval>      When -r is used, waits <interval> seconds per command.
                     It is possible to specify sub-second times like -i 0.1.

-r参数,-1为无限次,正常就是N次。

大批量数据加载

mass insertion guide

交互模式

redis-cli交互模式更常见。直接在运行 redis-cli 不要带命令,即进入交互模式。

1
2
3
$ redis-cli
127.0.0.1:6379> PING
PONG

默认的提示符127.0.0.1:6379,因为没有更改连接的服务器,另外还可以切换数据库,使用 SELECT命令

1
2
3
127.0.0.1:6379> SELECT 2
OK
127.0.0.1:6379[2]>

注意,切换数据库后,提示符发生了变化。

连接管理

可以使用CONNECT命令连接其他的redise服务器,参数1为主机或IP,参数2为端口。

1
2
3
4
5
$ 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> connect 127.0.0.1 6379
127.0.0.1:6379> 

连接到不同的服务器时,提示符会改变,如果连接失败,也会改变。

如果连接后,使用过程中,被动断开连接,redis-cli总是会尝试重新连接,(在输入命令后),重新连接后,redis-cli会自动重新选择 上次使用的数据库号,但是,关于连接的所有其他状态都将丢失,如 MULTI/EXEC事务。

历史命令

redis-cli默认会保存历史命令,保存在用户主目录中名为.rediscli_history的文件中。可以通过设置REDISCLI_HISTFILE环境变量来使用不同的历史文件名, 并通过将其设置为/dev/null来禁用它。

Continuous stats mode

它可以实时监控Redis实例。要启用此模式,可以使用--stat选项。输出非常清楚地显示了这种模式下CLI的行为:

1
2
3
4
5
6
7
8
9
10
11
$ redis-cli --stat
------- data ------ --------------------- load -------------------- - child -
keys       mem      clients blocked requests            connections
506        1015.00K 1       0       24 (+0)             7
506        1015.00K 1       0       25 (+1)             7
506        3.40M    51      0       60461 (+60436)      57
506        3.40M    51      0       146425 (+85964)     107
507        3.40M    51      0       233844 (+87419)     157
507        3.40M    51      0       321715 (+87871)     207
508        3.40M    51      0       408642 (+86927)     257
508        3.40M    51      0       497038 (+88396)     257

在这种模式下,每秒打印一行有用的信息和旧数据点之间请求值的差异。使用该工具,可以很容易地了解内存使用情况、客户端连接计数以及有关连接的Redis数据库的各种其他统计数据。 另外,可以使用 -i参数设置刷新频频。

Scanning for big keys

在这种特殊模式下,redis-cli作为键空间分析器。它扫描数据集寻找大键,但也提供关于数据集组成的数据类型的信息。该模式通过--bigkeys选项启用,并产生详细的输出:

1
2
3
4
5
6
7
8
9
$ redis-cli --bigkeys

# Scanning the entire keyspace to find biggest keys as well as
# average sizes per key type.  You can use -i 0.1 to sleep 0.1 sec
# per 100 SCAN commands (not usually needed).

...
...
...

该程序使用了 SCAN命令。也可以使用 -i参数指定间隔时间。

Getting a list of keys

列举所有的key,该命令内部也是用 SCAN命令,也可以使用-i进行间隔打印。

1
$ redis-cli --scan 

key可能有很多,可以加入一个过滤选项 --pattern:(中间含有mytest字符串的key)

1
$ redis-cli --scan --pattern '*mytest*'

tip:该命令可以配合 grep ,wc 等命令进行简单统计

参考

Redis Offical

This post is licensed under CC BY 4.0 by the author.