redis:redis-cli使用

redis-cli 是Redis命令行界面,一个简单的程序,允许直接从终端向Redis发送命令,并读取服务器发送的回复。

  • redis数据库对命令大小写不敏感,ping、Ping、PING是同一个命令
  • redis数据库对变量大小写敏感,A、a是两个变量

两种模式

它有两种主要模式:

  • 一种交互模式,其中有一个 REPL(读取评估打印循环),用户可以在其中键入命令并获得回复;
  • 另一种模式,其中命令作为 的参数发送redis-cli、执行并打印在标准输出上

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

命令行使用

方法:

$ redis-cli incr mycounter
(integer) 7

命令的回复是“7”。由于 Redis 回复是类型化的(它们可以是字符串、数组、整数、NULL、错误等),您会在括号中看到回复的类型。

然而,当redis-cli必须将的输出用作另一个命令的输入时,或者当我们想要将其重定向到文件时,这并不是一个好主意。

实际上redis-cli只显示附加信息,当它检测到标准输出是一个 tty(基本上是一个终端)时,可以提高人类的可读性。否则它将自动启用原始输出模式,如方法2所示

方法2

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

(integer)由于 CLI 检测到输出不再写入终端,因此输出中省略了该时间。您甚至可以使用以下–raw选项在终端上强制原始输出,如方法3所示

方法3

$ redis-cli --raw incr mycounter
9

类似地,您可以使用–no-raw.

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

  • 默认情况下redis-cli,通过127.0.0.1 端口 6379 连接到服务器。
  • 可以使用命令行选项轻松更改此设置。要指定不同的主机名或 IP 地址,请使用-h. 要设置不同的端口,请使用-p.
$ redis-cli -h redis15.localnet.org -p 6390 ping
PONG
  • 如果您的实例受密码保护,该-a <password>选项将执行身份验证,从而无需显式使用AUTH命令:
$ redis-cli -a myUnguessablePazzzzzword123 ping
PONG
  • 最后,可以使用以下-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-cli -u redis://p%40ssw0rd@redis-16379.hosted.com:16379/0 ping
PONG

连续运行相同的命令

可以在用户选择的两次执行之间暂停的情况下,将同一命令执行指定的次数

  • -r <count>:运行命令的次数
  • -i <delay>
    • 每隔几秒运行一次命令。
    • 默认情况下,间隔(或延迟)设置为 0,因此命令会尽快执行
    • 注意:-i的单位是秒,不支持毫秒,如果想每隔10毫秒执行一次,可以用-i 0.01

示例:对foo自增5次

$ redis-cli -r 5 incr foo
(integer) 1
(integer) 2
(integer) 3
(integer) 4
(integer) 5

示例:执行三次ping

bogon:~ ww$ redis-cli -r 3 ping
PONG
PONG
PONG
bogon:~ ww$ 

示例:每隔1秒执行一次ping,执行五次

bogon:~ ww$ redis-cli -r 5 -i 1 ping
PONG
PONG
PONG
PONG
PONG
bogon:~ ww$ 

示例

要永远运行相同的命令,请使用-1作为 count。因此,为了随时间监控 RSS 内存大小,可以使用如下命令:

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

CSV 输出

有时您可能希望使用redis-cli以快速将数据从 Redis 导出到外部程序。这可以使用 CSV(逗号分隔值)输出功能来完成:

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

目前不可能像那样导出整个数据库,而只能运行带有 CSV 输出的单个命令。

交互模式

在交互模式下,用户在提示符下键入 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

通常在检测到断开连接后,CLI 总是会尝试透明地重新连接:如果尝试失败,则显示错误并进入断开连接状态。以下是断开和重新连接的示例:

127.0.0.1:6379> debug restart
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自动重新选择上次选择的数据库编号。但是,连接的所有其他状态都将丢失,例如处于事务中间的事务状态:

$ 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

在交互模式下使用 CLI 进行测试时,这通常不是问题,但您应该了解此限制。

运行相同的命令 N 次

通过在命令名称前加上一个数字,可以多次运行相同的命令:

127.0.0.1:6379> 5 incr mycounter
(integer) 1
(integer) 2
(integer) 3
(integer) 4
(integer) 5

清除终端屏幕

clear在交互模式下使用该命令会清除终端的屏幕。

特殊操作模式

-x

  • –x选项代表从标准输入(stdin)读取数据作为redis-cli的最后一个参数,一般与管道符在一起使用。
[root@Redis ~]# echo dbsize|redis-cli -x 
(integer) 14

例如下面的操作会将字符串world作为set hello的值:
在这里插入图片描述

–stat:连续统计模式

–stat选项可以实时获取redis的重要统计信息,虽然info命令中的统计信息更全,但是能实时看到一些增量的数据对redis的运维还是有一些帮助的

$ 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

在这里插入图片描述

在这种模式下,每秒钟都会打印一条新行,其中包含有用信息和旧数据点之间的差异。您可以轻松了解内存使用情况、客户端连接等情况。

-i <interval>在这种情况下,该选项用作修改器,以更改发出新行的频率。默认值为一秒。

-hotkeys:找出server中热点key 命令

# Scanning the entire keyspace to find hot 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).

[00.00%] Hot key 'dd' found so far with counter 4
[00.00%] Hot key 'myset' found so far with counter 5
[00.00%] Hot key 'a' found so far with counter 5
[00.00%] Hot key 'dds' found so far with counter 4
[71.43%] Hot key 'aa' found so far with counter 4
[71.43%] Hot key 'key' found so far with counter 4

-------- summary -------

Sampled 14 keys in the keyspace!
hot key found with counter: 5	keyname: myset
hot key found with counter: 5	keyname: a
hot key found with counter: 4	keyname: dd
hot key found with counter: 4	keyname: dds
hot key found with counter: 4	keyname: aa
hot key found with counter: 4	keyname: key

–bigkeys:扫描大键

--bigkeys选项使用scan命令对redis的键进行采样,从中找到内存占用较大的键值,这些键可能是系统的瓶颈

$ 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).

[00.00%] Biggest string found so far 'key-419' with 3 bytes
[05.14%] Biggest list   found so far 'mylist' with 100004 items
[35.77%] Biggest string found so far 'counter:__rand_int__' with 6 bytes
[73.91%] Biggest hash   found so far 'myobject' with 3 fields

-------- summary -------

Sampled 506 keys in the keyspace!
Total key length in bytes is 3452 (avg len 6.82)

Biggest string found 'counter:__rand_int__' has 6 bytes
Biggest   list found 'mylist' has 100004 items
Biggest   hash found 'myobject' has 3 fields

504 strings with 1403 bytes (99.60% of keys, avg size 2.78)
1 lists with 100004 items (00.20% of keys, avg size 100004.00)
0 sets with 0 members (00.00% of keys, avg size 0.00)
1 hashs with 3 fields (00.20% of keys, avg size 3.00)
0 zsets with 0 members (00.00% of keys, avg size 0.00)

–scan:扫描指定模式的键

  • 此模式与该–bigkeys选项一样,使用SCAN命令
  • 因此如果数据集发生变化,可能会多次报告键,但如果自迭代开始以来该键就存在,则不会丢失任何键
$ redis-cli --scan | head -10
key-419
key-71
key-236
key-50
key-38
key-458
key-453
key-499
key-446
key-371

请注意,head -10用于仅打印输出的第一行。

扫描能够使用带有选项的SCAN命令的底层模式匹配功能–pattern。

$ redis-cli --scan --pattern '*-11*'
key-114
key-117
key-118
key-113
key-115
key-112
key-119
key-11
key-111
key-110
key-116

通过wc命令管道输出可用于按键名计算特定类型的对象:

$ redis-cli --scan --pattern 'user:*' | wc -l
3829433

监控Redis实例的延迟

redis通常用于延迟非常关键的环境中。延迟涉及应用程序的多个移动部分,从客户端库到网络堆栈,再到redis实例本身

–latency

  • 测试客户端到目标Redis的网络延迟

实例

例如当前拓扑结构如下图所示。客户端B和Redis在机房B,客户端A在机房A,机房A和机房B是跨地区的

在这里插入图片描述
客户端B:

[root@Redis ~]# redis-cli --latency
min: 0, max: 1, avg: 0.07 (824 samples)

客户端A:

[root@chenxing2 redis]# redis-cli -h 192.168.71.135 --latency
min: 0, max: 1, avg: 0.33 (113 samples)

可以看到客户端A由于距离Redis比较远,平均网络延迟会稍微高一些

–latency-history

–latency的执行结果只有一条,如果想以分时段的形式了解延迟信息,可以使用 --latency-history 选项:

redis-cli -h 127.0.0.1 -p 6379 --latency-history
min: 0, max: 2, avg: 0.27 (1301 samples) -- 15.01 seconds range
min: 0, max: 2, avg: 0.27 (1301 samples) -- 15.00 seconds range
.
.
.
min: 0, max: 1, avg: 0.28 (1308 samples) -- 15.00 seconds range

可以看出,每15秒输出一次,可以通过-i参数控制时间间隔,比如:

[root@chenxing2 redis]#  redis-cli -h 127.0.0.1 -p 6379 --latency-history -i 1  //一秒输出一次
min: 0, max: 1, avg: 0.27 (92 samples) -- 1.00 seconds range
min: 0, max: 1, avg: 0.23 (91 samples) -- 1.00 seconds range

–latency-dist

  • 该选项会使用统计图表的形式从控制台输出延迟统计信息
$ redis-cli --latency-dist
(output not displayed, requires a color terminal, try it!)

–rdb:导入rdb文件

root@hylaz:~# redis-cli --rdb rdb.log
SYNC sent to master, writing 344 bytes to 'rdb.log'
Transfer finished with success.

该命令选项实现:

  • 向server发送SYNC命令,返回需要写的总字节数
  • 从server读取总字节数据写到指定文件中

–slave:从机模式

–slave选项是把当前客户端模拟成当前redis节点的从节点,可以用来获当前redis节点的更新操作

合理的利用这个选项可以记录当前连接Redis节点的更新操作,这些更新操作可能是实际开发业务时需要的数据。

第一个客户端使用–slave选项,可以看到它会一直处于等待状态:

[root@Redis ~]# redis-cli --slave
SYNC with master, discarding 1765 bytes of bulk transfer...
SYNC done. Logging commands from master.
"PING"

另外一些客户端进行一些数据的操作:

127.0.0.1:6379> set zj sb
OK
127.0.0.1:6379> del zj
(integer) 1

设置–slave选项的客户端会出现这些操作的指示:

[root@Redis ~]# redis-cli --slave
SYNC with master, discarding 1765 bytes of bulk transfer...
SYNC done. Logging commands from master.
"PING"
"PING"
"PING"
"PING"
"PING"
"SELECT","0"
"set","zj","sb"
"PING"
"PING"
"del","zj"

–pipe

–pipe选项用于将命令封装成Redis通信协议定义的数据格式,批量发送给Redis执行。

–raw和–no-raw

–no-raw选项是要求命令的返回结果必须是原始的格式,–raw恰恰相反,返回格式化后的结果。

在Redis中设置一个键,如果用get或–no-row选项,那么返回的结果是二进制格式:

[root@Redis ~]# redis-cli set hello "你好"
OK
[root@Redis ~]# redis-cli get hello
"\xe4\xbd\xa0\xe5\xa5\xbd"
[root@Redis ~]# redis-cli --no-raw get hello
"\xe4\xbd\xa0\xe5\xa5\xbd"

如果使用–raw选项,就会返回中文:

[root@Redis ~]# redis-cli --raw get hello
你好
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值