
# 使用memtier_benchmark测试Redis性能
Memtier_benchmark是Redis Labs推出的一款命令行工具，它能够产生多种流量模式，对Redis实例进行基准测试。该工具提供了丰富的自定义选项和报表功能，通过命令行界面就能够轻松地使用。了解memtier_benchmark更多详情，请访问<https://github.com/RedisLabs/memtier_benchmark>。
针对DCS Redis实例的性能评估，可以使用memtier_benchmark测试某种规格的实例在某个高并发场景下执行SET或GET时的性能。
#### 测试步骤
1. 创建Redis缓存实例。
2. 创建3台弹性云服务器（ECS），如果是测试单机或主备实例，创建1台ECS即可。**ECS选择与实例相同可用区、VPC、子网和安全组**。
3. 在每台ECS上安装[memtier_benchmark](https://github.com/RedisLabs/memtier_benchmark)。
   
   该步骤以操作系统为CentOS 8.0为例进行安装。如果需要在Ubuntu系统下安装memtier_benchmark，请参见[Ubuntu系统下安装memtier_benchmark]。
   1. 准备工作。
      1. 安装编译所需的工具。 **yum** **install -y autoconf** **automake** **make** **gcc-c++** **git**
         
      
      2. 启用PowerTools存储库的方法。 **dnf config-manager --set-enabled PowerTools**
         
      
      3. 安装依赖库。 **yum install -y pcre-devel** **zlib-devel** **libmemcached-devel** **openssl-devel** **libevent-devel**
         
       
   
   2. 下载、编译、安装memtier_benchmark的库。
      1. 根目录下创建文件夹，用于下载memtier_benchmark。 **mkdir /env**
         
      
      2. 下载memtier_benchmark源码。 **cd /env**
         **git clone https://github.com/RedisLabs/memtier_benchmark.git**
         ![](https://support.huaweicloud.com/usermanual-dcs/public_sys-resources/caution_3.0-zh-cn.png)
         如果下载memtier_benchmark源码返回如下报错，请执行**git clone https://github.com/RedisLabs/memtier_benchmark.git** **-b 1.4.0**切换分支安装。
         ![](https://support.huaweicloud.com/usermanual-dcs/zh-cn_image_0000002384009708.png "点击放大")
         
      
      3. 进入源码目录。 **cd memtier_benchmark**
         
      
      4. 编译生成可执行文件memtier_benchmark。 **autoreconf -ivf**
         **./configure**
         **make**
         
      
      5. 将工具安装到系统中。 **make install**
         
       
   
   3. 运行帮助命令查看是否安装成功。如果返回memtier_benchmark的参数说明，表示安装成功。 **memtier_benchmark --help**
      
    
   
   
4. 每台ECS上执行测试命令。
   
   如果实例类型为单机、主备、Proxy集群、读写分离，命令为：
   ```
   memtier_benchmark -s {IP}  -p {port}  -n {nreqs}  -c {connect_number}  -t 4 -d {datasize} -a {password}
   ```
   如果实例类型为Cluster集群，则命令为：
   ```
   memtier_benchmark --cluster-mode -s {IP}  -p {port}  -n {nreqs}  -c {connect_number}  -t 4 -d {datasize} -a {password}
   ```
   参数参考值：-c {connect_number}：200，-n {nreqs}：10000000，-d {datasize}：32。
   - -s表示实例的域名连接地址或IP地址。
   
   - -p表示实例的端口，默认为6379。
   
   - -t表示基准测试使用的线程数量。
   
   - -c表示客户端连接数。
   
   - -d表示单条数据大小，单位：byte。
   
   - -n表示测试包数量。
   
   - -a表示实例的连接密码，免密连接的实例无需输入-a {password}。
   
   
   
   
5. 不断调整客户端连接数，执行[4]，得到最大的QPS（Query Per Second，表示每秒处理的读写操作数，单位：次/秒）。
6. 取3台测试ECS得到的每秒操作数总和，即为对应规格的性能数据。 
   如果测试Redis集群，建议每台测试ECS各开启两个benchmark客户端。
   
   
 
#### memtier_benchmark常用选项
- -s \<server\>：表示实例的域名连接地址或IP地址。
- -p \<port\>：表示实例的端口，默认为6379。
- -t \<threads\>：表示基准测试使用的线程数量。例如，-t 4表示使用4个线程。
- -c \<clients\>：指定并发客户端的数量。例如，-c 50表示同时有50个客户端并发连接。
- -d \<bytes\>：表示单条数据大小，单位：byte。
- -n \<requests\>：指定每个客户端发送的请求数。
- -a \<password\>：表示实例的连接密码，免密连接的实例无需配置。

- --ratio \<ratio\>：指定SET:GET操作的比例。例如，--ratio=1:0表示写读比例为1:0。
- --test-time \<seconds\>：表示指定测试的持续时间，单位：秒。该选项不能和-n同时使用。
- --key-prefix \<prefix\>：表示压测键的前缀。
- --key-minimum \<min\>：表示指定键的最小值，默认值为0。
- --key-maximum \<max_key\>：表示指定键的最大值，默认值为10000000。
- --key-pattern \<pattern\>：指定键的生成模式。默认值为R:R，表示键是随机生成的。
如需了解更多memtier_benchmark详情，请访问<https://github.com/RedisLabs/memtier_benchmark>。
 #### Ubuntu系统下安装memtier_benchmark
您可以通过以下两种方式在Ubuntu系统下安装memtier_benchmark：
- 软件包安装
  ```
  sudo apt install lsb-release curl gpg
  curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
  echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
  sudo apt-get update
  sudo apt-get install memtier-benchmark
  ```
  
- 源码编译安装，以下命令通过源码安装2.2.0版本，最新的发布版本请参考[发布列表](https://github.com/RedisLabs/memtier_benchmark/releases)。
  ```
  sudo apt-get install build-essential autoconf automake \
      libevent-dev pkg-config zlib1g-dev libssl-dev
  cd /tmp && git clone https://github.com/RedisLabs/memtier_benchmark.git -b 2.2.0
  cd memtier_benchmark
  autoreconf -ivf && ./configure && make
  sudo make install
  ```
  
 
