文档首页/ 分布式缓存服务 DCS/ 用户指南/ 测试实例性能/ 使用redis-benchmark测试Redis性能
更新时间:2024-11-06 GMT+08:00

使用redis-benchmark测试Redis性能

Redis客户端源码包含一个名为redis-benchmark的性能测试工具,它可以模拟N个客户端同时向Redis发送M条查询命令的应用场景。

针对DCS Redis实例的性能评估,可以使用redis-benchmark测试某种规格的实例在某个高并发场景下执行SET或GET时的性能。

测试步骤

  1. 创建Redis缓存实例。
  2. 创建3台弹性云服务器(ECS),ECS选择与实例相同可用区、VPC、子网和安全组。

    如果是测试单机或主备实例,创建1台ECS即可。

  3. 在每台ECS上安装redis-benchmark。可通过以下两种方式安装Redis-server,安装Redis-server的同时,会同步安装benchmark。

    • 安装方法一:
      1. 下载redis客户端,此处以redis-6.0.9版本为例。

        wget http://download.redis.io/releases/redis-6.0.9.tar.gz

      2. 解压客户端压缩包。

        tar xzf redis-6.0.9.tar.gz

      3. 进入redis-6.0.9的src目录下。

        cd redis-6.0.9/src

      4. 编译源码。

        make

        编译完成后,工具一般在redis-x.x.x的src目录下。

      5. 查看是否有redis-benchmark可执行文件。

        ls

      6. 将工具安装到系统中。

        make install

    • 安装方法二:

      根据ECS的不同的操作系统直接安装Redis-server,下面以ubuntu和CentOS系统为例:

      • ubuntu系统
        sudo apt update 
        sudo apt install redis-server
      • CentOS系统
        sudo yum install epel-release 
        sudo yum update 
        sudo yum -y install redis

  4. 每台ECS上执行测试命令。

    redis-benchmark -h {IP} -p {Port} -a {password} -n {nreqs} -r {randomkeys} -c {connect_number} -d {datasize} -t {command}

    参数参考值:-c {connect_number}:200,-n {nreqs}:10000000,-r {randomkeys}:1000000,-d {datasize}:32。

    • -h表示实例的域名连接地址或IP地址。
    • -p表示实例的端口,默认为6379。
    • -a表示实例的连接密码,免密连接的实例无需输入-a {password}。
    • -t表示执行具体测试命令合集。例如只测试set命令时,使用-t set;如果要测试ping、get、set命令,则使用 -t ping,set,get,命令间使用“,”分隔。
    • -c表示客户端连接数。
    • -d表示单条数据大小,单位Byte。
    • -n表示测试包数量。
    • -r表示使用随机key数量。

  5. 不断调整客户端连接数,执行4,得到最大的QPS(Query Per Second,表示每秒处理的读写操作数,单位:次/秒)。
  6. 取3台测试ECS得到的每秒操作数总和,即为对应规格的性能数据。

    如果测试Redis集群,建议每台测试ECS各开启两个benchmark客户端。

    • redis-benchmark 测试cluster集群实例时需要加 --cluster 参数,其他实例类型不需要加。
    • 如果想对cluster集群的最大连接数进行性能压测,但是压测到1万连接时程序退出,或者报错 Cannot assign requested address。这说明是测试用的ECS本机性能不足,请先检查自己是否只用了1台ECS进行压测。想要对集群压测,建议准备3台ECS,每台ECS起3个redis-benchmark来测试redis实例的最大连接数。

redis-cli常用选项

  • -h <hostname> :服务器的主机名,可以是IP或者域名
  • -p <port> :服务器的端口,默认是6379
  • -a <password> :连接服务器的密码,免密连接的实例无需输入-a {password}
  • -r <repeat> :执行指定命令N次
  • -n <db> :数据库编号,默认是0
  • -c :启用集群模式(遵循-ASK和-MOVED重定向)
  • --latency :进入特殊模式连续采样延迟
  • --scan :非阻塞式的扫描键空间(区别于keys *扫描键空间会导致redis-server阻塞)
  • --eval <file> :使用Lua脚本发送EVAL命令
  • -x :读取STDIN中的最后一个参数
  • --bigscan :扫描数据集的大key
  • --raw : 如果显示数据是这样的'\xe4\xb8'十六进制编码,可以尝试加--raw转为直接显示原始数据

了解redis-cli更多详情,请访问 https://redis.io/docs/connect/cli/

redis-cli常用命令举例

  • 连接实例:

    ./redis-cli -h {IP} -p 6379

  • 指定连接某个DB:

    ./redis-cli -h {IP} -p 6379 -n 10

  • 连接cluster集群实例:

    ./redis-cli -h {IP} -p 6379 -c

  • 测试时延(原理是发ping命令):

    ./redis-cli -h {IP} -p 6379 --latency

  • 执行scan扫描匹配指定模式的key:

    ./redis-cli -h {IP} -p 6379 --scan --pattern '*:12345*'

redis-benchmark (redis-6.0.9)常用选项

  • -h <hostname> :服务器的主机名,可以是IP或者域名。
  • -p <port> :服务器的端口,默认是6379。
  • -a <password> :连接服务器的密码,免密连接的实例无需输入-a {password}。
  • -c <clients> :并发连接数 ,默认50。
  • -n <requests> :请求总数(默认为100000)。
  • -d <size> :SET/GET值的数据大小(以字节为单位,默认值2)。
  • --dbnum <db> :选择指定的数据库编号(默认值0)。
  • --threads <num> :启动多线程模式(redis 6.0版本编译的redis-benchmark才支持,多线程压测redis的性能优于单线程)。
  • --cluster :启动集群模式(cluster集群才需要该参数)。
  • -k <boolean> :1=keep alive 0=reconnect(默认值1,可以测试长短连接)。
  • -r <keyspacelen> : 对SET/GET/INCR使用随机键,对SADD使用随机值。参数中keyspacelen 指的是添加键的数量。
  • -e :如果服务器回复错误,请在stdout上显示它们。
  • -q :只展示query/sec的值。
  • -l :循环测试。
  • -t <tests> :可以对指定的命令进行测试。
  • -I :空闲模式,仅打开N个空闲连接并等待。
  • -P <numreq> :管道请求的并发数量(默认值为1)。

了解redis-benchmark更多详情,请访问:https://redis.io/docs/latest/operate/oss_and_stack/management/optimization/benchmarks/

redis-benchmark常用命令举例

  • 单机、主备、读写分离和proxy集群的测试命令:

    ./redis-benchmark -h {IP或域名} -p 6379 -a {password} --threads {num} -n { nreqs } -r { randomkeys } -c {clients} -d {datasize} -t {command}

  • cluster集群测试命令:

    ./redis-benchmark -h {IP或域名} -p 6379 -a {password} --threads {num} -n { nreqs } -r { randomkeys } -c {clients} -d {datasize} --cluster -t {command}

  • 测试短连接:

    ./redis-benchmark -h {IP或域名} -p 6379 -a {password} --threads {num} -n { nreqs } -r { randomkeys } -c {clients} -d {datasize} -k 0 -t {command}

  • 测试空闲连接:

    ./redis-benchmark -h {IP或域名} -p 6379 -a {pwd} -c {clients} -I