本文介绍Redis企业版(容量存储型)性能测试的具体方法。

工作负载

  • Load:100%的string set操作(写操作)。
  • Uniform-Read:采用Workload A,100%均匀随机string get操作(读操作),主要测试严苛条件下的读性能。
  • Zipfian-Read:采用Workload C,数据分布方法为zipfian,测试大部分读请求访问小部分数据的性能,符合大部分的读场景。
  • Uniform-50%Read-50%Update:采用Workload A,50%的string set操作(更新操作)与50%的string get操作,主要测试随机更新的性能。

关于Workload的详细介绍,请参见Core Workloads

测试场景

测试主要针对下述两种场景进行:

  • 内存大于数据场景:绝大部分数据可以在内存中访问到,此场景下内存与数据的比例约为7:1。
  • 数据大于内存场景:只有部分数据缓存在内存,绝大多数访问需要读写硬盘,此场景下内存与数据的比例约为1:4。

测试命令

下述脚本以数据大于内存场景为例。

#! /bin/bash

ip=192.168.0.23
port=3100
timeout=30000
command_group=string
recordcount=640000000
run_operationcount=20000000
fieldcount=1
fieldlength=100
threads=32
load_sleep_time=600
run_sleep_time=60

echo "##################################### $command_group  ############################################"
#Load
./bin/ycsb load redis -s -P workloads/workloada -p "redis.host=${ip}" -p  "redis.port=${port}" -p "recordcount=${recordcount}" -p "operationcount=${recordcount}" -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -threads ${threads}
sleep ${load_sleep_time}

#Uniform-Read
./bin/ycsb run redis -s -P workloads/workloadc  -p "redis.host=${ip}" -p  "redis.port=${port}" -p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -p "requestdistribution=uniform" -threads ${threads}
sleep ${run_sleep_time}

#Zipfian-Read
./bin/ycsb run redis -s -P workloads/workloadc  -p "redis.host=${ip}" -p  "redis.port=${port}" -p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -p "requestdistribution=zipfian" -threads ${threads}
sleep ${run_sleep_time}

#Uniform-50%Read-50%Update
./bin/ycsb run redis -s -P workloads/workloada  -p "redis.host=${ip}" -p  "redis.port=${port}" -p "recordcount=${recordcount}" -p "operationcount=${run_operationcount}" -p "redis.timeout=${timeout}" -p "redis.command_group=${command_group}" -p "fieldcount=${fieldcount}" -p "fieldlength=${fieldlength}" -p "requestdistribution=uniform" -threads ${threads}
表 1. 参数说明
参数 说明
ip Redis实例的IP地址。
port Redis实例的服务端口。
timeout 测试命令的超时时间。
command_group 测试类型,配置为String。
recordcount 数据装载阶段准备的数据量。
run_operationcount Run阶段操作的数据量。本测试中:
  • 内存大于数据场景下,配置和recordcount参数相同的值。
  • 数据大于内存场景下,配置的值为recordcount参数值除以32。
fieldcount 字段个数,配置为1。
fieldlength 值长度,配置为100。
threads YCSB线程数,根据实例规格配置。