Redis-benchmark使用总结

Redis-benchmark为Redis性能测试工具。

指令说明:

Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]

-h <hostname>      Server hostname (default 127.0.0.1)
-p <port>          Server port (default 6379)
-s <socket>        Server socket (overrides host and port)
-c <clients>       Number of parallel connections (default 50)
-n <requests>      Total number of requests (default 10000)
-d <size>          Data size of SET/GET value in bytes (default 2)
-k <boolean>       1=keep alive 0=reconnect (default 1)
-r <keyspacelen>   Use random keys for SET/GET/INCR, random values for SADD
  Using this option the benchmark will get/set keys
  in the form mykey_rand:000000012456 instead of constant
  keys, the <keyspacelen> argument determines the max
  number of values for the random number. For instance
  if set to 10 only rand:000000000000 - rand:000000000009
  range will be allowed.
-P <numreq>        Pipeline <numreq> requests. Default 1 (no pipeline).
-q                 Quiet. Just show query/sec values 只显示每秒钟能处理多少请求数结果
--csv              Output in CSV format
-l                 Loop. Run the tests forever 永久测试
-t <tests>         Only run the comma separated list of tests. The test
                    names are the same as the ones produced as output.
-I                 Idle mode. Just open N idle connections and wait.


实例:

redis-benchmark -h 127.0.0.1 -p 6379 -q -d 100  
SET/GET 100 bytes 检测host为127.0.0.1 端口为6379的redis服务器性能


redis-benchmark -h 127.0.0.1 -p 6379 -c 5000 -n 100000 
5000个并发连接,100000个请求,检测host为127.0.0.1 端口为6379的redis服务器性能 




benchmark工具测试信息:
测试命令:
redis-benchmark -n 100000 -c 60
向redis服务器发送100000个请求,每个请求附带60个并发客户端
结果(部分):
====== SET ======
对集合写入测试
  100000 requests completed in 2.38 seconds
100000个请求在2.38秒内完成
  60 parallel clients
每次请求有60个并发客户端
  3 bytes payload
每次写入3个字节的数据
  keep alive: 1
保持一个连接,一台服务器来处理这些请求


93.06% <= 15 milliseconds
99.96% <= 31 milliseconds
99.98% <= 46 milliseconds
99.99% <= 62 milliseconds
100.00% <= 62 milliseconds
所有请求在62毫秒内完成
42105.26 requests per second
每秒处理42105.26次请求

单连接:

[root@local-idc-tcaplus-docker25 src]# redis-benchmark -h 10.10.40.26 -p 6379 -c 1 -n 10000 -q
PING_INLINE: 6544.50 requests per second, p50=0.135 msec                  
PING_MBULK: 5112.47 requests per second, p50=0.151 msec                  
SET: 6574.62 requests per second, p50=0.143 msec                  
GET: 4967.71 requests per second, p50=0.159 msec                  
INCR: 5133.47 requests per second, p50=0.151 msec                  
LPUSH: 5543.24 requests per second, p50=0.151 msec                  
RPUSH: 6765.90 requests per second, p50=0.135 msec                  
LPOP: 5249.34 requests per second, p50=0.159 msec                  
RPOP: 5780.35 requests per second, p50=0.151 msec                  
SADD: 5899.70 requests per second, p50=0.151 msec                  
HSET: 5608.52 requests per second, p50=0.151 msec                  
SPOP: 5434.78 requests per second, p50=0.151 msec                  
ZADD: 5030.18 requests per second, p50=0.167 msec                  
ZPOPMIN: 5099.44 requests per second, p50=0.151 msec                  
LPUSH (needed to benchmark LRANGE): 5452.56 requests per second, p50=0.143 msec                  
LRANGE_100 (first 100 elements): 4269.85 requests per second, p50=0.183 msec                  
LRANGE_300 (first 300 elements): 3827.02 requests per second, p50=0.207 msec                  
LRANGE_500 (first 500 elements): 2787.84 requests per second, p50=0.255 msec                  
LRANGE_600 (first 600 elements): 2723.31 requests per second, p50=0.271 msec                  
MSET (10 keys): 4812.32 requests per second, p50=0.159 msec 

多连接 50:

[root@local-idc-tcaplus-docker25 src]# redis-benchmark -h 10.10.40.26 -p 6379 -c 50 -n 10000 -q
PING_INLINE: 57471.27 requests per second, p50=0.551 msec          
PING_MBULK: 57142.86 requests per second, p50=0.543 msec                   
SET: 62500.00 requests per second, p50=0.527 msec                   
GET: 62893.08 requests per second, p50=0.527 msec
INCR: 60975.61 requests per second, p50=0.527 msec                   
LPUSH: 59171.60 requests per second, p50=0.543 msec                   
RPUSH: 60240.96 requests per second, p50=0.527 msec
LPOP: 64516.13 requests per second, p50=0.511 msec                   
RPOP: 70921.98 requests per second, p50=0.471 msec
SADD: 74626.87 requests per second, p50=0.455 msec                  
HSET: 73529.41 requests per second, p50=0.463 msec
SPOP: 71428.57 requests per second, p50=0.463 msec          
ZADD: 70422.53 requests per second, p50=0.479 msec                   
ZPOPMIN: 70921.98 requests per second, p50=0.463 msec
LPUSH (needed to benchmark LRANGE): 72463.77 requests per second, p50=0.471 msec                   
LRANGE_100 (first 100 elements): 40816.32 requests per second, p50=0.815 msec                   
LRANGE_300 (first 300 elements): 16611.29 requests per second, p50=1.703 msec                   
LRANGE_500 (first 500 elements): 11037.53 requests per second, p50=2.407 msec                   
LRANGE_600 (first 600 elements): 9587.73 requests per second, p50=2.703 msec                    
MSET (10 keys): 58479.53 requests per second, p50=0.567 msec   

<think>好的,我现在需要回答用户关于如何使用redis-benchmark进行性能测试以及注意事项的问题。首先,我得回顾一下用户提供的引用内容,看看里面有哪些关键信息可以利用。 用户提供的引用中提到了redis-benchmark的基本命令参数,比如-c(并发数)、-n(总请求数)、-q(安静模式)、-r(随机键数量)等。还有提到第三方工具如YCSB和redisbench,但用户主要关注的是redis-benchmark本身,所以可能需要先介绍基本用法,再提到其他工具作为补充。 接下来,引用里还提到了管道输出和使用grep过滤结果,这说明在运行基准测试时,用户可能需要处理大量输出数据,这时候使用管道和grep会很有帮助。另外,关于延迟监控的部分,用户可以使用--latency选项来检查Redis实例的延迟情况,这也应该包含在注意事项里。 用户的问题包括使用方法和最佳实践,所以需要分步骤解释。首先,我需要介绍基本命令格式,然后列举常用参数并解释每个参数的作用。例如,-h指定主机,-p指定端口,-c设置并发连接数,-n设置总请求数,-k是否使用keepalive,-t选择要测试的命令,-q启用安静模式,-r生成随机键,-d设置数据大小,-P使用管道,-l循环测试,以及--csv输出CSV格式。这些参数都需要详细说明,让用户知道如何组合使用。 然后,在最佳实践部分,需要根据引用中的信息提出建议。比如,逐步增加并发数,使用随机键避免缓存影响,模拟真实数据大小,结合管道提升吞吐量,监控系统资源,多次测试取平均值,以及结合其他工具如redis-cli的延迟检测。此外,注意事项中要提到网络影响、避免在生产环境测试、结果分析方法和版本兼容性等问题。 需要注意的是,用户可能不太清楚某些参数的具体影响,比如为什么使用-r或者-P,这时候需要用简单的例子说明。例如,使用-r 10000可以生成1万到10万的键,避免所有请求都集中在同一个键上,从而更真实地模拟实际场景。 另外,引用中提到了集群测试的局限性,即redis-benchmark不支持集群模式,这时候可以建议使用第三方工具如redisbench来进行集群测试,并附上相关下载链接,但用户主要问题还是关于redis-benchmark本身,所以这部分可能放在注意事项或扩展建议里。 最后,确保回答结构清晰,分步骤讲解,参数用列表展示,示例命令用代码块,注意事项和最佳实践分点说明。同时,引用中的信息需要正确标注,例如提到性能测试指标时引用[^1],集群测试工具引用[^2],参数说明引用[^3],延迟检测引用[^4]。 现在,我需要把这些思考整理成一个连贯的回答,确保每个部分都覆盖到,并且符合用户要求的格式,比如行内公式用$...$,独立公式用$$...$$,但在这个问题中可能用不上数学公式,但需要留意是否有相关内容。此外,生成的相关问题需要与主题相关,比如如何解读结果、优化性能、集群测试工具比较等。</think>### 如何使用 redis-benchmark 进行性能测试及注意事项 #### 一、redis-benchmark 基础用法 `redis-benchmark` 是 Redis 官方自带的性能测试工具,用于模拟客户端并发请求并测量 Redis 服务器的吞吐量和延迟。 **基本命令格式**: ```bash redis-benchmark [参数] [命令] ``` #### 二、核心参数详解 1. **连接配置** - `-h <host>`:指定 Redis 服务器 IP(默认 `127.0.0.1`) - `-p <port>`:指定端口(默认 `6379`) 2. **负载配置** - `-c <clients>`:并发连接数(默认 50) - `-n <requests>`:总请求数(默认 100000) - `-k <1/0>`:是否启用 Keepalive(默认 1,启用) 3. **测试命令选择** - `-t <command>`:指定要测试的命令(如 `SET,GET,LPUSH`),默认测试全部命令 - 示例:仅测试 `SET` 和 `GET` ```bash redis-benchmark -t SET,GET -n 10000 ``` 4. **输出控制** - `-q`:安静模式,仅输出每秒请求数(QPS)[^3] - `-r <keyspace>`:生成随机键范围(如 `-r 10000` 表示键名从 1 到 10000) - `--csv`:结果以 CSV 格式输出 5. **数据配置** - `-d <size>`:SET/GET 值的数据大小(默认 3 字节) ```bash redis-benchmark -d 1024 # 测试 1KB 数据 ``` 6. **高级特性** - `-P <num>`:使用管道(Pipeline)批量发送请求(提升吞吐量) - `-l`:循环测试,持续运行直到手动停止 #### 三、性能测试最佳实践 1. **逐步增加并发数** 从低并发(如 `-c 50`)开始,逐步增加以观察性能拐点。例如: ```bash redis-benchmark -c 50 -n 100000 && redis-benchmark -c 100 -n 200000 ``` 2. **使用随机键避免缓存影响** 添加 `-r 100000` 参数,避免重复操作同一键导致内存缓存优化失真。 3. **模拟真实数据大小** 根据业务场景设置 `-d`,如缓存图片时测试 `-d 4096`(4KB)。 4. **结合管道提升吞吐量** 使用 `-P 10` 批量发送请求,减少网络往返开销: ```bash redis-benchmark -P 10 -q ``` 5. **监控系统资源** 测试时通过 `top` 或 `htop` 观察 Redis 服务器的 CPU、内存和网络占用。 6. **多次测试取平均值** 运行 3-5 次测试,排除偶然波动。 7. **结合延迟检测工具** 使用 `redis-cli --latency` 实时监控请求延迟分布: ```bash redis-cli -h 192.168.1.100 --latency ``` #### 四、注意事项 1. **网络影响** 避免在跨机房或高延迟网络中测试,建议在本地或同机房执行。 2. **生产环境慎用** `redis-benchmark` 可能对生产环境造成负载压力,建议在测试环境运行。 3. **结果分析** 关注 `requests per second`(QPS)和 `latency`(延迟)指标,结合业务需求判断是否达标。 4. **集群测试限制** `redis-benchmark` 不支持原生集群模式,需使用第三方工具如 `redisbench` 进行集群基准测试。 5. **版本兼容性** 确保测试工具与 Redis 服务器版本一致,避免协议不兼容问题。 #### 五、完整示例 ```bash # 测试远端 RedisSET/GET 命令,使用 100 并发、10 万请求、1KB 数据、随机键 redis-benchmark -h 192.168.1.100 -p 6379 -t SET,GET -c 100 -n 100000 -d 1024 -r 10000 --csv ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

流子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值