Redis CLI
redis-cli 概述,Redis 命令行界面
在交互模式下,redis-cli
具有基本的行编辑功能,可提供熟悉的键入体验。
要在特殊模式下启动程序,您可以使用多个选项,包括:
- 模拟副本并打印它从主副本接收的复制流。
- 检查 Redis 服务器的延迟并显示统计信息。
- 请求延迟样本和频率的 ASCII art 频谱图。
本主题涵盖redis-cli
,从最简单的功能开始,到更高级的功能结束。
命令行用法
要在终端上运行 Redis 命令并返回标准输出,请将要执行的命令作为redis-cli
:
$ redis-cli INCR mycounter
(integer) 7
命令的回复是 “7”。由于 Redis 回复是类型化的(字符串、数组、整数、nil、错误等),因此您可以在括号之间看到回复的类型。当redis-cli
必须用作其他命令的输入或重定向到文件中。
redis-cli
仅在检测到标准输出是 TTY 或 Terminal 时显示附加信息以供人类阅读。对于所有其他输出,它将自动启用 raw 输出模式,如以下示例所示:
$ redis-cli INCR mycounter > /tmp/output.txt
$ cat /tmp/output.txt
8
请注意,(integer)
在输出中被省略,因为redis-cli
检测
输出不再写入终端。您可以强制 Raw 输出
即使在终端上,使用--raw
选择:
$ redis-cli --raw INCR mycounter
9
您可以在写入文件时强制用户可读输出,也可以在
使用 pipe 连接到其他命令--no-raw
.
字符串引用和转义
什么时候redis-cli
解析命令时,空格字符会自动分隔参数。
在交互模式下,换行符发送用于解析和执行的命令。
要输入包含空格或不可打印字符的字符串值,可以使用带引号和转义的字符串。
带引号的字符串值用双引号 () 或单引号 () 括起来。
转义序列用于将不可打印的字符放入字符和字符串 Literals 中。"
'
转义序列包含一个反斜杠 () 符号,后跟一个转义序列字符。\
双引号字符串支持以下转义序列:
\"
- 双引号\n
- 换行符\r
- 回车\t
- 水平选项卡\b
- 退格键\a
-警报\\
-反斜線\xhh
- 由十六进制数 (hh)
单引号假定字符串是 literals,并且只允许以下转义序列:
\'
- 单引号\\
-反斜線
例如,要返回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
连接到地址为 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
注意:出于安全原因,请将密码提供给redis-cli
通过REDISCLI_AUTH
环境变量。
最后,可以发送对数据库编号进行作的命令
除了默认数字 0 之外,使用-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>
option 和 URI 模式redis://user:password@host:port/dbnum
:
$ redis-cli -u redis://LJenkins:p%40ssw0rd@redis-16379.hosted.com:16379/0 PING
PONG
注意:user、password 和 dbnum 是可选的。
对于没有用户名的身份验证,请使用 usernamedefault
.
对于 TLS,请使用方案rediss
.
您可以使用-4
或-6
参数分别为 IPv4 或 IPv6 设置 DNS 查找的首选项。
SSL/TLS 协议
默认情况下,redis-cli
使用普通 TCP 连接连接到 Redis。
您可以使用--tls
选项以及--cacert
或--cacertdir
配置受信任的根证书捆绑包或目录。
如果目标服务器需要使用客户端证书进行身份验证,
您可以使用--cert
和--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 的
standard input 作为满足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
field output 的 API 中,或者当我们想要模拟一些
Recurring Write 事件,例如每 5 秒将一个新项目推送到列表中。
此功能由两个选项控制:-r <count>
和-i <delay>
.
这-r
option 表示运行命令的次数,-i
集
不同命令调用之间的延迟(以秒为单位)(具有
指定值,例如 0.1 表示 100 毫秒)。
默认情况下,间隔(或延迟)设置为 0,因此只执行命令 尽快:
$ redis-cli -r 5 INCR counter_value
(integer) 1
(integer) 2
(integer) 3
(integer) 4
(integer) 5
要无限期地运行相同的命令,请使用-1
作为 Count 值。
要监视 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
使用 Mass 插入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
雷迪斯EVAL
command 获取脚本使用的键列表,而
其他非键参数,作为不同的数组。调用EVAL
你
以数字形式提供键数。
调用redis-cli
使用--eval
选项中,无需指定 key 的数量
明确地。相反,它使用分隔键和参数的约定
带逗号。这就是为什么在上面的调用中您会看到location:hastings:temp , 23
作为参数。
所以location:hastings:temp
将填充KEYS
数组和23
这ARGV
数组。
这--eval
选项在编写简单脚本时很有用。了解更多
复杂工作,建议使用 Lua 调试器。可以混合使用这两种方法,因为调试器还可以从外部文件执行脚本。
交互模式
我们已经探索了如何将 Redis CLI 用作命令行程序。
这对于脚本和某些类型的测试很有用,但大多数
人们将大部分时间花在redis-cli
使用其交互式
模式。
在交互模式下,用户在提示符处键入 Redis 命令。命令 被发送到服务器,进行处理,然后回复被解析并呈现 转换为更简单的阅读形式。
运行redis-cli
在交互模式下 -
只需执行它,不带任何参数
$ redis-cli
127.0.0.1:6379> PING
PONG
字符串127.0.0.1:6379>
是提示符。它显示连接的 Redis 服务器实例的主机名和端口。
当连接的服务器发生变化或在数据库编号 0 不同的数据库上作时,提示符会更新:
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
进入 disconnected 状态
模式并尝试重新连接每个新命令:
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
总是尝试
透明地重新连接;如果尝试失败,则会显示错误和
进入 DISCONNECTED 状态。以下是断开连接的示例
和 reconnection:
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
在交互模式下
测试,但应该知道此限制。
使用-t <timeout>
选项以指定服务器超时(以秒为单位)。
编辑、历史记录、完成和提示
因为redis-cli
使用 LineNoise Line 编辑库,则
始终具有行编辑功能,无需依赖libreadline
或
其他可选库。
可以访问命令执行历史记录,以避免通过按箭头键(向上和向下)重新键入命令。
历史记录在 CLI 重新启动之间保留在名为.rediscli_history
在用户主目录中,按照
由HOME
环境变量。可以使用不同的
history filename 中,通过设置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
偏好。
反向历史记录搜索,例如CTRL-R
在终端中。
偏好
有两种方法可以进行自定义redis-cli
行为。文件.redisclirc
在 CLI 启动时加载。您可以覆盖
文件的默认位置,方法是将REDISCLI_RCFILE
环境变量设置为
另一种路径。还可以在 CLI 会话期间设置首选项,其中
如果它们将仅持续会话期间。
要设置首选项,请使用特殊的:set
命令。以下首选项
可以通过在 CLI 中键入命令或将其添加到.redisclirc
文件:
:set hints
- 启用语法提示:set nohints
- 禁用语法提示
运行相同的命令 N 次
可以在交互模式下多次运行同一命令,只需在命令前加上前缀即可 name 替换为数字:
127.0.0.1:6379> 5 INCR mycounter
(integer) 1
(integer) 2
(integer) 3
(integer) 4
(integer) 5
显示 Redis 命令的联机帮助
redis-cli
为大多数 Redis 命令提供在线帮助,使用HELP
命令。该命令可以使用
有两种形式:
HELP @<category>
显示有关给定类别的所有命令。这 类别包括:@generic
@string
@list
@set
@sorted_set
@hash
@pubsub
@transactions
@connection
@server
@scripting
@hyperloglog
@cluster
@geo
@stream
HELP <commandname>
显示作为参数给出的命令的特定帮助。
例如,为了显示PFADD
命令中,使用:
127.0.0.1:6379> HELP PFADD
PFADD key element [element ...]
summary: Adds the specified elements to the specified HyperLogLog.
since: 2.8.9
请注意,HELP
还支持 TAB 完成。
清除终端屏幕
使用CLEAR
命令将清除终端的屏幕。
特殊作模式
到目前为止,我们看到了两种主要的模式redis-cli
.
- Redis 命令的命令行执行。
- 交互式 “REPL” 用法。
CLI 执行与 Redis 相关的其他辅助任务,这些任务 将在以下各节中介绍:
- Monitoring 工具显示有关 Redis 服务器的连续统计信息。
- 扫描 Redis 数据库以查找非常大的键。
- 具有模式匹配的键空间扫描器。
- 充当 Pub/Sub 客户端以订阅频道。
- 监控执行到 Redis 实例中的命令。
- 以不同的方式检查 Redis 服务器的延迟。
- 检查本地计算机的调度程序延迟。
- 从本地远程 Redis 服务器传输 RDB 备份。
- 充当 Redis 副本,用于显示副本接收的内容。
- 模拟 LRU 工作负载以显示有关按键命中的统计信息。
- Lua 调试器的客户端。
连续统计模式
连续统计模式可能是redis-cli
实时监控 Redis 实例。要启用此模式,--stat
选项。
输出非常清楚地说明了 CLI 在此模式下的行为:
$ 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 数据库的各种其他统计信息redis-cli
工具。
这-i <interval>
option 用作修饰符,以便
更改发出新行的频率。默认值为 1
第二。
扫描大 key 和内存使用情况
大键
在此特殊模式下,redis-cli
用作密钥空间分析器。它会扫描
数据集,但也提供有关数据类型的信息
数据集包含的此模式通过--bigkeys
选择
并生成详细的输出:
$ 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).
100.00% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Keys sampled: 55
-------- summary -------
Total key length in bytes is 495 (avg len 9.00)
Biggest list found "bikes:finished" has 1 items
Biggest string found "all_bikes" has 36 bytes
Biggest hash found "bike:1:stats" has 3 fields
Biggest stream found "race:france" has 4 entries
Biggest set found "bikes:racing:france" has 3 members
Biggest zset found "racer_scores" has 8 members
1 lists with 1 items (01.82% of keys, avg size 1.00)
16 strings with 149 bytes (29.09% of keys, avg size 9.31)
1 MBbloomCFs with 0 ? (01.82% of keys, avg size 0.00)
1 hashs with 3 fields (01.82% of keys, avg size 3.00)
3 streams with 8 entries (05.45% of keys, avg size 2.67)
2 TDIS-TYPEs with 0 ? (03.64% of keys, avg size 0.00)
1 TopK-TYPEs with 0 ? (01.82% of keys, avg size 0.00)
2 sets with 5 members (03.64% of keys, avg size 2.50)
1 CMSk-TYPEs with 0 ? (01.82% of keys, avg size 0.00)
2 zsets with 11 members (03.64% of keys, avg size 5.50)
25 ReJSON-RLs with 0 ? (45.45% of keys, avg size 0.00)
在输出的第一部分,每个新 key 都大于前一个 larger 报告 key (相同类型) 遇到。摘要部分 提供有关 Redis 实例内部数据的一般统计信息。
该程序使用SCAN
命令,因此可以针对繁忙的
server 的-i
选项可以是
用于限制指定分数的扫描过程
每个SCAN
命令。
例如-i 0.01
将大大减慢程序的执行速度,但也将减少服务器上的负载
可以忽略不计。
请注意,摘要还以更简洁的形式报告找到的最大键 每次。最初的输出只是为了提供一些有趣的信息 如果针对非常大的数据集运行,则为 ASAP。
这--bigkeys
选项现在适用于集群副本。
内存使用情况
与--bigkeys
选择--memkeys
允许您扫描整个密钥空间以查找最大的密钥以及
每种键类型的平均大小。
$ redis-cli --memkeys
# 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).
100.00% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Keys sampled: 55
-------- summary -------
Total key length in bytes is 495 (avg len 9.00)
Biggest list found "bikes:finished" has 104 bytes
Biggest string found "all_bikes" has 120 bytes
Biggest MBbloomCF found "bikes:models" has 1048680 bytes
Biggest hash found "bike:1:stats" has 104 bytes
Biggest stream found "race:italy" has 7172 bytes
Biggest TDIS-TYPE found "bikes:sales" has 9832 bytes
Biggest TopK-TYPE found "bikes:keywords" has 114256 bytes
Biggest set found "bikes:racing:france" has 120 bytes
Biggest CMSk-TYPE found "bikes:profit" has 144056 bytes
Biggest zset found "racer_scores" has 168 bytes
Biggest ReJSON-RL found "bikes:inventory" has 4865 bytes
1 lists with 104 bytes (01.82% of keys, avg size 104.00)
16 strings with 1360 bytes (29.09% of keys, avg size 85.00)
1 MBbloomCFs with 1048680 bytes (01.82% of keys, avg size 1048680.00)
1 hashs with 104 bytes (01.82% of keys, avg size 104.00)
3 streams with 16960 bytes (05.45% of keys, avg size 5653.33)
2 TDIS-TYPEs with 19648 bytes (03.64% of keys, avg size 9824.00)
1 TopK-TYPEs with 114256 bytes (01.82% of keys, avg size 114256.00)
2 sets with 208 bytes (03.64% of keys, avg size 104.00)
1 CMSk-TYPEs with 144056 bytes (01.82% of keys, avg size 144056.00)
2 zsets with 304 bytes (03.64% of keys, avg size 152.00)
25 ReJSON-RLs with 15748 bytes (45.45% of keys, avg size 629.92)
这--memkeys
选项现在适用于集群副本。
合--bigkeys
和--memkeys
您可以使用--keystats
和--keystats-samples
组合选项--memkeys
和--bigkeys
替换为其他分布数据。
$ redis-cli --keystats
# Scanning the entire keyspace to find the biggest keys and distribution information.
# Use -i 0.1 to sleep 0.1 sec per 100 SCAN commands (not usually needed).
# Use --cursor <n> to start the scan at the cursor <n> (usually after a Ctrl-C).
# Use --top <n> to display <n> top key sizes (default is 10).
# Ctrl-C to stop the scan.
100.00% ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Keys sampled: 55
Keys size: 1.30M
--- Top 10 key sizes ---
1 1.00M MBbloomCF "bikes:models"
2 140.68K CMSk-TYPE "bikes:profit"
3 111.58K TopK-TYPE "bikes:keywords"
4 9.60K TDIS-TYPE "bikes:sales"
5 9.59K TDIS-TYPE "racer_ages"
6 7.00K stream "race:italy"
7 4.92K stream "race:france"
8 4.75K ReJSON-RL "bikes:inventory"
9 4.64K stream "race:usa"
10 1.26K ReJSON-RL "bicycle:7"
--- Top size per type ---
list bikes:finished is 104B
string all_bikes is 120B
MBbloomCF bikes:models is 1.00M
hash bike:1:stats is 104B
stream race:italy is 7.00K
TDIS-TYPE bikes:sales is 9.60K
TopK-TYPE bikes:keywords is 111.58K
set bikes:racing:france is 120B
CMSk-TYPE bikes:profit is 140.68K
zset racer_scores is 168B
ReJSON-RL bikes:inventory is 4.75K
--- Top length and cardinality per type ---
list bikes:finished has 1 items
string all_bikes has 36B
hash bike:1:stats has 3 fields
stream race:france has 4 entries
set bikes:racing:france has 3 members
zset racer_scores has 8 members
Key size Percentile Total keys
-------- ---------- -----------
64B 0.0000% 3
239B 50.0000% 28
763B 75.0000% 42
4.92K 87.5000% 49
9.60K 93.7500% 52
140.69K 96.8750% 54
1.00M 100.0000% 55
Note: 0.01% size precision, Mean: 24.17K, StdDeviation: 138.12K
Key name length Percentile Total keys
--------------- ---------- -----------
19B 100.0000% 55
Total key length is 495B (9B avg)
Type Total keys Keys % Tot size Avg size Total length/card Avg ln/card
--------- ------------ ------- -------- -------- ------------------ -----------
list 1 1.82% 104B 104B 1 items 1.00
string 16 29.09% 1.33K 85B 149B 9B
MBbloomCF 1 1.82% 1.00M 1.00M - -
hash 1 1.82% 104B 104B 3 fields 3.00
stream 3 5.45% 16.56K 5.52K 8 entries 2.67
TDIS-TYPE 2 3.64% 19.19K 9.59K - -
TopK-TYPE 1 1.82% 111.58K 111.58K - -
set 2 3.64% 208B 104B 5 members 2.50
CMSk-TYPE 1 1.82% 140.68K 140.68K - -
zset 2 3.64% 304B 152B 11 members 5.50
ReJSON-RL 25 45.45% 15.38K 629B - -
获取键列表
也可以扫描密钥空间,同样以一种不会
阻止 Redis 服务器(当您使用命令时确实会发生这种情况
喜欢KEYS *
) 并打印所有键名称,或针对特定
模式。此模式与--bigkeys
选项,使用SCAN
命令
因此,如果数据集正在更改,则可以多次报告 key,但不会
key 将永远不会丢失,如果该 key 自
迭 代。由于它使用的命令,因此调用此选项--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
command 可用于对特定
类型的对象,按键名称:
$ redis-cli --scan --pattern 'user:*' | wc -l
3829433
您可以使用-i 0.01
要添加对SCAN
命令。
这将使命令变慢,但会显著减少服务器上的负载。
发布/订阅模式
CLI 能够使用
这PUBLISH
命令。订阅频道以接收
messages 不同 - 终端被阻止并等待
消息,因此这是在redis-cli
.与
其他特殊模式此模式不是通过使用特殊选项来启用的,
而只需使用SUBSCRIBE
或PSUBSCRIBE
命令,这些命令位于
交互或命令模式:
$ redis-cli PSUBSCRIBE '*'
Reading messages... (press Ctrl-C to quit)
1) "PSUBSCRIBE"
2) "*"
3) (integer) 1
正在阅读的消息消息显示我们进入了 Pub/Sub 模式。
当另一个客户端在某个频道中发布一些消息时,例如使用命令redis-cli PUBLISH mychannel mymessage
,则 Pub/Sub 模式下的 CLI 将显示如下内容:
1) "pmessage"
2) "*"
3) "mychannel"
4) "mymessage"
这对于调试 Pub/Sub 问题非常有用。
要退出 Pub/Sub 模式,只需处理CTRL-C
.
监控在 Redis 中执行的命令
与 Pub/Sub 模式类似,监视模式会自动进入
使用MONITOR
命令。活动 Redis 实例收到的所有命令都将打印到标准输出中:
$ redis-cli MONITOR
OK
1460100081.165665 [0 127.0.0.1:51706] "set" "shipment:8000736522714:status" "sorting"
1460100083.053365 [0 127.0.0.1:51707] "get" "shipment:8000736522714:status"
请注意,可以通过管道传输输出,因此您可以监控
对于特定模式,请使用grep
.
监控 Redis 实例的延迟
Redis 通常用于延迟非常关键的上下文。延迟 涉及应用程序中的多个移动部件,来自 Client 端库 到网络堆栈,到 Redis 实例本身。
这redis-cli
具有多种工具,用于研究 Redis 的延迟
实例,并了解延迟的最大值、平均值和分布。
基本的延迟检查工具是--latency
选择。使用这个
选项时,CLI 会运行一个循环,其中PING
命令发送到 Redis
实例,并测量接收回复的时间。这种情况发生 100 次
的次数,并且统计信息会在控制台中实时更新:
$ redis-cli --latency
min: 0, max: 1, avg: 0.19 (427 samples)
统计信息以毫秒为单位提供。通常,平均延迟
一个非常快速的实例往往会被高估一点,因为
由于正在运行的系统的内核调度程序而导致的延迟redis-cli
本身,因此 0.19 以上的平均延迟可能很容易达到 0.01 或更低。
然而,这通常不是一个大问题,因为大多数开发人员都对
几毫秒或更长时间的事件。
有时,研究最大延迟和平均延迟如何很有用
随着时间的推移而发展。这--latency-history
option 用于此
目的:工作原理与--latency
,但每 15 秒(通过
default) 从头开始新的采样会话:
$ redis-cli --latency-history
min: 0, max: 1, avg: 0.14 (1314 samples) -- 15.01 seconds range
min: 0, max: 1, avg: 0.18 (1299 samples) -- 15.00 seconds range
min: 0, max: 1, avg: 0.20 (113 samples)^C
采样会话的长度可以使用-i <interval>
选择。
最先进的延迟研究工具,但也是最复杂的
对于没有经验的用户来说,是能够使用彩色终端
以显示一系列延迟。您将看到一个彩色输出,指示
不同百分比的样本,以及指示
不同的延迟数字。此模式是使用--latency-dist
选择:
$ redis-cli --latency-dist
(output not displayed, requires a color terminal, try it!)
内部实现了另一个非常不寻常的延迟工具redis-cli
.
它不会检查 Redis 实例的延迟,但会检查
计算机正在运行redis-cli
.这种延迟是内核调度程序所固有的,
虚拟机管理程序(如果是虚拟化实例)等。
Redis 称其为固有延迟,因为它对程序员来说大多是不透明的。
如果 Redis 实例具有高延迟,而不管所有明显的事情
这可能是源头原因,值得检查您的系统最好的是什么
可以通过运行redis-cli
在这个特殊模式下,您可以直接在系统中
正在运行 Redis 服务器。
通过测量固有延迟,您知道这是基线
Redis 无法超越您的系统。要运行 CLI
在此模式下,使用--intrinsic-latency <test-time>
.请注意,测试时间以秒为单位,指示测试应运行多长时间。
$ ./redis-cli --intrinsic-latency 5
Max latency so far: 1 microseconds.
Max latency so far: 7 microseconds.
Max latency so far: 9 microseconds.
Max latency so far: 11 microseconds.
Max latency so far: 13 microseconds.
Max latency so far: 15 microseconds.
Max latency so far: 34 microseconds.
Max latency so far: 82 microseconds.
Max latency so far: 586 microseconds.
Max latency so far: 739 microseconds.
65433042 total runs (avg latency: 0.0764 microseconds / 764.14 nanoseconds per run).
Worst run took 9671x longer than the average latency.
重要说明:此命令必须在运行 Redis 服务器实例的计算机上执行,而不是在其他主机上执行。它不连接到 Redis 实例,而是在本地执行测试。
在上述情况下,系统不能做得比最差的 739 微秒好 case 延迟,因此可以预期某些查询偶尔会运行少于 1 毫秒。
RDB 文件的远程备份
在 Redis 复制的第一次同步期间,主副本和副本
以 RDB 文件的形式交换整个数据集。此功能被利用
由redis-cli
为了提供一个远程备份工具,允许
将 RDB 文件从任何 Redis 实例传输到运行本地的计算机redis-cli
.要使用此模式,请使用--rdb <dest-filename>
选择:
$ redis-cli --rdb /tmp/dump.rdb
SYNC sent to master, writing 13256 bytes to '/tmp/dump.rdb'
Transfer finished with success.
这是确保灾难恢复的一种简单而有效的方法
您的 Redis 实例存在 RDB 备份。在 中使用此选项时
scripts 或cron
jobs 中,请务必检查命令的返回值。
如果它为非零,则发生错误,如以下示例所示:
$ redis-cli --rdb /tmp/dump.rdb
SYNC with master failed: -ERR Can't SYNC while not connected with my master
$ echo $?
1
副本模式
CLI 的副本模式是一项高级功能,可用于
Redis 开发人员和调试作。
它允许检查主数据库在复制中发送到其副本的内容
stream 来将写入传播到其副本。选项
name 只是--replica
.下面是一个工作示例:
$ redis-cli --replica
SYNC with master, discarding 13256 bytes of bulk transfer...
SYNC done. Logging commands from master.
"PING"
"SELECT","0"
"SET","last_name","Enigk"
"PING"
"INCR","mycounter"
该命令首先丢弃第一次同步的 RDB 文件 然后以 CSV 格式记录收到的每个命令。
如果您认为某些命令未在副本中正确复制 这是检查正在发生的事情的好方法,也是有用的信息 为了改进 bug 报告。
执行 LRU 仿真
Redis 通常用作具有 LRU 驱逐的缓存。
根据键的数量和分配给
cache(通过maxmemory
指令)、缓存命中量
失误会改变。有时,模拟命中率非常
有助于正确预置缓存。
这redis-cli
具有特殊模式,可在其中执行 GET 和 SET 的模拟
作,在 Requests 模式中使用 80-20% 的幂律分布。
这意味着 20% 的 key 将在 80% 的时间内被请求,即
缓存方案中的常见分布。
从理论上讲,考虑到请求的分布和 Redis 内存 开销,应该可以分析地计算命中率 使用数学公式。但是,Redis 可以配置为 不同的 LRU 设置(样本数)和 LRU 的实现,其中 在 Redis 中是近似的,不同版本之间变化很大。同样地 每个密钥的内存量可能因版本而异。这就是为什么这个 工具构建:其主要动机是测试 Redis 的 LRU 的质量 实现,但现在也可用于测试给定版本的 的行为与最初用于部署的设置相同。
要使用该模式,请指定测试中的密钥数量,并配置一个合理的maxmemory
设置为第一次尝试。
重要说明:配置maxmemory
Redis 配置中的设置
至关重要:如果最大内存使用量没有上限,则点击将
最终为 100%,因为所有键都可以存储在内存中。如果指定了太多具有最大内存的键,最终将使用所有计算机 RAM。还需要配置适当的 maxmemory 策略;大多数时候allkeys-lru
处于选中状态。
在以下示例中,配置了 100MB 的内存限制和 LRU 使用 1000 万个密钥进行模拟。
警告: 该测试使用 pipelining 并且会给服务器带来压力,不要使用它 使用生产实例。
$ ./redis-cli --lru-test 10000000
156000 Gets/sec | Hits: 4552 (2.92%) | Misses: 151448 (97.08%)
153750 Gets/sec | Hits: 12906 (8.39%) | Misses: 140844 (91.61%)
159250 Gets/sec | Hits: 21811 (13.70%) | Misses: 137439 (86.30%)
151000 Gets/sec | Hits: 27615 (18.29%) | Misses: 123385 (81.71%)
145000 Gets/sec | Hits: 32791 (22.61%) | Misses: 112209 (77.39%)
157750 Gets/sec | Hits: 42178 (26.74%) | Misses: 115572 (73.26%)
154500 Gets/sec | Hits: 47418 (30.69%) | Misses: 107082 (69.31%)
151250 Gets/sec | Hits: 51636 (34.14%) | Misses: 99614 (65.86%)
该程序每秒显示一次统计数据。在最初的几秒钟内,缓存开始填充。失误率后来稳定为可以预期的实际数字:
120750 Gets/sec | Hits: 48774 (40.39%) | Misses: 71976 (59.61%)
122500 Gets/sec | Hits: 49052 (40.04%) | Misses: 73448 (59.96%)
127000 Gets/sec | Hits: 50870 (40.06%) | Misses: 76130 (59.94%)
124250 Gets/sec | Hits: 50147 (40.36%) | Misses: 74103 (59.64%)
对于某些用例,59% 的失误率可能不可接受 100MB 的内存是不够的。观察一个使用半 GB 内存的示例。经过几次 分钟,则输出稳定为以下数字:
140000 Gets/sec | Hits: 135376 (96.70%) | Misses: 4624 (3.30%)
141250 Gets/sec | Hits: 136523 (96.65%) | Misses: 4727 (3.35%)
140250 Gets/sec | Hits: 135457 (96.58%) | Misses: 4793 (3.42%)
140500 Gets/sec | Hits: 135947 (96.76%) | Misses: 4553 (3.24%)
对于 500MB,则有足够的空间用于密钥数量 (1000 万) 和分配 (80-20 样式)。