Redis Shell 之 redis-cli,redis-server,redis-benchmark,Pipeline 详解 (九)

本文详细介绍了Redis的Shell工具,包括redis-cli的-repeat, -i, -x等选项,redis-server的--test-memory选项以及redis-benchmark的性能测试功能。此外,还讲解了Pipeline机制,它通过减少RTT提升效率,但要注意命令的合理组织以避免过大数据量导致的问题。" 12321641,917049,OpenCV 2.4.6与VS2010 MFC静态库集成指南,"['opencv', 'vs2010', 'mfc', '静态库', 'C++']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Redis提供了redis-cli 、 redis-server 、 redis-benchmark 等shell工具。

一、redis-cli详解

1、-r

-r(repeat)选项代表将命令执行多次;如执行三次ping:

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

2、-i

-i(interval)选项代表每隔几秒执行一次命令,但是-i必须和-r一起使用。

//每隔1秒执行一次ping,执行五次
bogon:~ ww$ redis-cli -r 5 -i 1 ping
PONG
PONG
PONG
PONG
PONG
bogon:~ ww$ 

注意:-i的单位是秒,不支持毫秒,如果想每隔10毫秒执行一次,可以用-i 0.01

info命令:返回关于 Redis 服务器的各种信息和统计数值。

使用方法: redis-cli info

3、-x

代表从标准输入读取数据作为redis-cli的最后一个参数,如:

bogon:~ bjhl$ echo 'world' |redis-cli -x set wao
OK
bogon:~ bjhl$ redis-cli 
127.0.0.1:6379> get wao
"world\n"
127.0.0.1:6379> 

4、-c

连接Redis Cluster 节点时需要使用的,-c选项可以防止moved和ask异常。

5、-a

如果Redis配置了密码,可以用-a(auth)选项,有了这个选项就不需要手动输入auth命令。

6、--scan 和 --pattern

--scan选项和--pattern 选项用于扫描指定模式的键,相当于使用scan命令

7、--slave

该选项就是把当前客户端模拟成当前的redis节点的从节点,可以用来获取当前redis节点的更新操作。合理的利用这个选项可以记录当前连接redis节点的一些更新操作,这些更新操作很可能是实际开发业务时需要的数据。

8、--rdb

该选项会请求Redis实例生成并发送RDB持久化文件,保存在本地。可使用持久化文件的定期备份。

9、--pipe

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

10、--bigkeys

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

bogon:~ ww$ 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 'he' with 6 bytes
[00.00%] Biggest string found so far 'sl' with 12 bytes
[00.00%] Biggest list   found so far 'mylist' with 32298 items

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

Sampled 9 keys in the keyspace!
Total key length in bytes is 59 (avg len 6.56)

Biggest string found 'sl' has 12 bytes
Biggest   list found 'mylist' has 32298 items

8 strings with 39 bytes (88.89% of keys, avg size 4.88)
1 lists with 32298 items (11.11% of keys, avg size 32298.00)
0 sets with 0 members (00.00% of keys, avg size 0.00)
0 hashs with 0 fields (00.00% of keys, avg size 0.00)
0 zsets with 0 members (00.00% of keys, avg size 0.00)
0 streams with 0 entries (00.00% of keys, avg size 0.00)
bogon:~ ww$ 

11、--eval

该选项用于执行Lua脚本

12、--latency

latency有三个选项,分别是--latency、--latency-history、--latency-dist;他们都可以检测网络延迟,对于Redis开发和运维非常有帮助。

1)--latency

该选项可以测试客户端到目标Redis的网络延迟,如客户端A和Redis在一个机房A,客户端B在另外一个机房B,那么该命令就会看的出,B的平均网络延迟会稍微高一些。

bogon:~ ww$ redis-cli -h 127.0.0.1 -p 6379 --latency 
min: 0, max: 1, avg: 0.25 (424 samples)

如上代码,如果是B使用该命令,avg应该会比A使用该命令的值高。因为距离比较远

2)--latency-history

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

redis-cli -h 127.0.0.1 --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参数控制时间间隔

如: redis-cli -h 127.0.0.1 -p 6379 --latency-history -i 1  //一秒输出一次

3)--latency-dist

该选项会使用统计图表的形式从控制台输出延迟统计信息。

13、--stat

该选项可以实时获取Redis的重要统计信息,虽然info命令中的统计信息更全,但是能实时看到一些增量的数据(如requests)对于redis的运维还是有一定帮助的。

14、--raw和--no-raw

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

bogon:~ ww$ redis-cli --no-raw get he
"\xe5\x91\xb5\xe5\x91\xb5"
bogon:~ ww$ redis-cli --raw get he
呵呵
bogon:~ ww$ 

二、redis-server 详解

redis-server 除启动Redis之外,还有一个--test-memory选项,可以用来检测当前操作系统能否稳定的分配指定容量的内存给Redis,通过这种检测能避免因为内存问题造成的redis奔溃。

如:redis-server --test-memoey 1024 ;检测当前系统能否为redis提供1G的内存。

该功能更偏向于调试和测试。例如:想迅速占满机器内存做一些极端的测试。该功能是个不错的选择。

三、redis-benchmark详解

redis-benchmark可以为Redis做基准性能测试,它提供了很多选项帮助开发和运维人员测试Redis的相关性能。

1、-c

-c(clients) 选项代表客户端的并发数量(默认是50)

2、-n

-n(num)选项代表客户端请求总量(默认是100 000)

例如:redis-benchmark -c 100 -n 20000 代表 100个客户端同事请求redis,一共执行20000次,redis-benchmark会对各类数据结构的命令进行测试,并给出性能指标。

//执行命令后截取输出的一段进行说明
====== GET ======
  20000 requests completed in 0.34 seconds
  100 parallel clients
  3 bytes payload
  keep alive: 1

73.86% <= 1 milliseconds
99.93% <= 2 milliseconds
100.00% <= 2 milliseconds
58479.53 requests per second

执行命令后,如上面输出,测试get命令,一次执行20000个请求,0.34秒完成,每次请求数据量是3个字节,73.86%<=1毫秒,Redis每秒可以执行58479.53次ge请求。

3、-q

-q选项仅仅显示redis-benchmark的requests per second 信息,例如:

bogon:password ww$ redis-benchmark -c 100 -n 20000 -q
PING_INLINE: 69930.07 requests per second
PING_BULK: 53333.33 requests per second
SET: 58823.53 requests per second
GET: 60790.27 requests per second
INCR: 71174.38 requests per second
LPUSH: 69204.15 requests per second
RPUSH: 68965.52 requests per second
LPOP: 68259.38 requests per second
RPOP: 69686.41 requests per second
SADD: 68965.52 requests per second
HSET: 71174.38 requests per second
SPOP: 62305.29 requests per second
LPUSH (needed to benchmark LRANGE): 68728.52 requests per second
LRANGE_100 (first 100 elements): 17167.38 requests per second
LRANGE_300 (first 300 elements): 8041.82 requests per second
LRANGE_500 (first 450 elements): 5625.88 requests per second
LRANGE_600 (first 600 elements): 4013.65 requests per second
MSET (10 keys): 53050.40 requests per second

4、-r

在一个空的Redis上执行了redis-benchmark会发现只有四个键:

127.0.0.1:6379> keys *

1) "myset:__rand_int__"

2) "key:__rand_int__"

3) "mylist"

4) "counter:__rand_int__"

如果想向Redis插入更多的键,可以执行使用-r(randon)选项。可以向redis插入更多的键

注:-r后的的参数不是随机数的个数,如 redis-benchmark -r 10000 表示在key,counter,myset键后加一个12位的后缀,-r代表只对后四位做随机出来,

5、-p

-p 选项代表每个pipeline的数据量 (默认为1)

6、-t <boolean>

-t 选项可以对指定命令进行基准测试

bogon:~ ww$ redis-benchmark -t get,set -q
SET: 64516.13 requests per second
GET: 61728.39 requests per second
bogon:~ ww$ 

7、-k

该选项代表客户端能否使用keepalive,1为使用,0为不使用,默认值为1;

8、--csv

   该选项会将结果按照csv格式输出,便于后续处理,如导出到Excel等。

bogon:~ ww$ redis-benchmark -t get,set --csv
"SET","65659.88"
"GET","61236.99"
bogon:~ ww$ 

四、Pipeline详解

Redis客户端发送一条命令分四个过程:1:发送命令,2:命令排队,3:命令执行,4:返回结果。

其中1和4称为Round Trip Time (RTT,往返时间)

Redis提供了批量操作命令,有效的节约了RTT,但是大部分命令时不支持批量操作的,仍需要消耗n次RTT,Pipeline(流水线)机制能改善该问题,它能将一组Redis命令进行组装,通过一次RTT传输给Redis,再将结果按顺序返回给客户端,整个过程只需要消耗一次RTT。

redis-cli的--pipe选项实际就是使用Pipeline机制。

如: echo -en '*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n' | redis-cli --pipe  

原生批量命令与Pipeline对比

  1. 原生批量命令是原子的,Pipeline是非原子的
  2. 原生批量命令是一个命令对应多个key,Pipeline支持多个命令
  3. 原生批量命令是Redis服务端支持的实现,而Pipeline需要服务端和客户端的共同实现。

注:Pipeline虽然好用,但是每次组装的命令不能没有节制,否则一次组装Pipeline数据量过大,一方面会增加客户端的等待时间,另一方面会造成网络阻塞。可以将一次包含大量命令的Pipeline拆分成多个较小的Pipeline来完成。

 

 

<think>我们正在处理用户的问题:如何在redis-benchmark中指定命令进行性能测试,并给出示例。根据引用资料,我们知道redis-benchmarkRedis自带的性能测试工具。用户想要知道如何指定特定的命令进行测试。回顾引用:引用[1]给出了一个基本示例:redis-benchmark-hlocalhost-p6379-c50-n100000引用[5]中有一个使用-q(安静模式)并指定多个命令的示例,但该示例实际上是测试了多个命令(PING,SET,GET等),但并没有明确如何指定单个命令。实际上,redis-benchmark允许通过-t参数来指定要测试的命令。在引用[5]的示例中,虽然没有直接使用-t,但输出的结果中包含了多个命令,这是因为默认情况下redis-benchmark会测试一组命令。如果我们只想测试特定的命令,就需要使用-t选项。因此,我们可以这样解答:使用-t选项,后面跟上命令的名称(多个命令用逗号分隔),即可测试指定的命令。示例:测试SETGET命令:redis-benchmark-tset,get-n100000-c50参数说明:-t:指定要测试的命令,多个命令用逗号分隔(注意不要有空格)。-n:总请求数-c:并发客户端数另外,如果用户想要测试一个自定义命令(比如带有特定参数的),可以使用`-c`选项(注意不是并发数的-c,而是命令的-c)?但注意,redis-benchmark的参数中:用于指定并发数的参数是`-c`(小写),而用于指定命令的参数是`-t`(小写)。但是,如果要为命令提供特定的参数,我们可以使用`--command`选项(在较新版本中)或者通过管道等方式?不过,在redis-benchmark中,通常测试的是固定模式的命令(如SETkeyvalue,GETkey等),它不支持任意参数的命令。但我们可以通过指定命令名来测试该命令的固定模式。对于自定义参数的命令,redis-benchmark支持使用`-c`选项(注意这里是两个不同的选项,一个用于并发,一个用于命令)?实际上,在redis-benchmark中,没有直接提供为命令设置任意参数的功能。但是,我们可以使用`-x`选项来从标准输入读取命令?或者使用`-k`选项来使用管道?但通常,我们测试的是标准命令。因此,我们主要介绍使用-t选项来指定命令。另外,引用[5]中有一个示例是使用-n来指定请求数量,并使用-q来只输出每秒的请求数。因此,我们可以给出如下示例:示例1:测试SET命令redis-benchmark-tset-n100000-c50示例2:测试GET命令redis-benchmark-tget-n100000-c50示例3:同时测试SETGET命令redis-benchmark-tset,get-n100000-c50示例4:测试一个列表命令,如LPUSHredis-benchmark-tlpush-n100000-c50注意:在测试时,这些命令会使用默认的参数(比如SET命令的键名值都是redis-benchmark自动生成的)。如果需要自定义键名值的大小,可以使用其他选项:-k<boolean>:使用keepalive,1表示使用,0表示不使用,默认是1。-r<keyspacelen>:使用随机键名,例如-r1000000表示键名从1000000个不同的数字中随机选择。-d<size>:指定SET/GET值的数据大小(字节),例如-d100表示100字节的数据。示例5:测试SET命令,使用100字节的值,键名随机(范围1000000)redis-benchmark-tset-d100-r1000000-n100000-c50总结步骤:1.打开终端。2.输入redis-benchmark命令,使用-t指定命令,使用-n指定总请求数,使用-c指定并发数,其他可选参数按需设置。注意:确保Redis服务器正在运行,并且可以通过指定的主机端口访问(默认localhost:6379)。如果需要指定主机端口,使用-h-p选项。另外,引用[3]提醒:确保Redis服务器在测试期间能够承受负载,在生产环境中测试时要小心。因此,我们将按照以上思路回答用户问题,并给出示例。</think>### Redis-benchmark 指定命令性能测试方法 在 Redis 性能测试中,使用 `-t` 参数可指定单个或多个命令进行测试。以下是详细方法示例: #### 📌 核心语法 ```bash redis-benchmark -t [命令名] [其他参数] ``` - **`-t` 参数**:指定要测试的命令,多个命令用逗号分隔(**不能加空格**) - **常用辅助参数**: - `-n 100000`:总请求数(默认 100000) - `-c 50`:并发连接数(默认 50) - `-q`:安静模式(仅输出 QPS) - `-d 100`:SET/GET 值的大小(字节) --- #### 🧪 示例场景 ##### 示例 1:测试单个命令(SET) ```bash redis-benchmark -t set -n 200000 -c 100 -q ``` 输出示例: ```text SET: 98765.43 requests per second ``` ##### 示例 2:测试多个命令(GET LPUSH) ```bash redis-benchmark -t get,lpush -n 100000 -c 50 ``` 输出示例: ```text GET: 89285.71 requests per second LPUSH: 92592.59 requests per second ``` ##### 示例 3:测试带数据大小的命令(100字节的 SET) ```bash redis-benchmark -t set -d 100 -n 50000 -c 30 ``` 输出示例: ```text ====== SET ====== 50000 requests completed in 0.56 seconds 30 parallel clients 100 bytes payload ``` --- #### ⚠️ 注意事项 1. **命令名称必须正确** - 错误:`-t set, get`(逗号后不能有空格) - 正确:`-t set,get` 2. **测试前确认 Redis 版本支持该命令** 可通过 `redis-cli help @[类型]` 查看命令列表,如 `help @string` 3. **避免生产环境直接测试** 高并发测试可能影响线上服务,建议在独立环境进行[^3] 4. **自定义键空间** 使用 `-r 1000000` 可生成 100 万个随机键名(避免键冲突) --- #### 💡 性能指标解读 测试结果主要关注: - **QPS(Queries Per Second)**:每秒请求数,越高越好 - **延迟分布**:如 `99%` 请求在 `≤ 2ms` 完成 - **错误率**:`0.00%` 表示无失败请求 > 通过指定命令测试,可精准评估 Redis 在特定操作下的性能瓶颈,为优化提供依据[^4]。 --- ### 📚 相关问题 1. 如何测试 Redis 管道(pipeline)模式的性能? 2. `redis-benchmark` 测试结果中的延迟百分比(如 P99)如何解读? 3. 除了 `redis-benchmark`,还有哪些 Redis 性能测试工具? 4. 如何模拟真实业务场景的混合命令测试? [^1]: Redis学习指南(27)-Redis性能测试工具redis-benchmark [^2]: 使用 redis-benchmark 进行性能测试的详细指南 [^3]: Redis性能测试redis-benchmark [^4]: redis学习-25- Redis Benchmark性能测试 [^5]: redis-benchmark 报错 (error) ERR unknown command 'redis-benchmark' 无法性能测试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三丶竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值