命令行模式
命令行用法
可以在终端直接运行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次。
大批量数据加载
交互模式
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 等命令进行简单统计