redis-benchmark是官方自带的Redis性能测试工具,用来测试Redis在当前环境下的读写性能。在使用Redis的时候,服务器的硬件配置、网络状况、测试环境都会对Redis的性能有所影响,我们需要对Redis实时测试以确定Redis的实际性能。
redis-benchmark [参数] [参数值]
参数 | 描述 | 默认值 |
---|---|---|
-h | 指定服务器主机名 | 127.0.0.1 |
-p | 指定服务器端口 | 6379 |
-s | 指定服务器 socket | |
-c | 指定并发连接数 | 50 |
-n | 指定请求数 | 10000 |
-d | 以字节的形式指定 SET/GET 值的数据大小 | 2 |
-k | 1=keep alive 0=reconnect | 1 |
-r | SET/GET/INCR 使用随机 key, SADD 使用随机值 | |
-P | 通过管道传输 请求 | 1 |
-q | 强制退出 redis。仅显示 query/sec 值 | |
–csv | 以 CSV 格式输出 | |
-l | 生成循环,永久执行测试 | |
-t | 仅运行以逗号分隔的测试命令列表。 | |
-I | Idle 模式。仅打开 N 个 idle 连接并等待。 |
测试系统是CentOS7.X版本的,需要确保c++环境已经安装,执行【gcc -v】查看系统是否有gcc环境,如果没有使用yum安装,windows版本可以跳过这步。
yum install gcc-c++
redis下载地址:https://pan.baidu.com/s/13kHH-zU7vmh0YobyxhEmow,提取码:dmnx,下载后上传到服务器目录中。
# 解压
tar -zxf redis-4.0.14.tar.gz
# 进入解压目录
cd redis-4.0.14
# 编译
make
# 安装redis到/usr/local/redis
make install PREFIX=/usr/local/redis
# 复制配置文件到刚才的安装目录
cp redis.conf /usr/local/redis/
# 进入安装后的目录
cd /usr/local/redis
# 修改配置文件
vim redis.conf
# Redis后台启动
修改 daemonize 为 yes
# Redis服务器可以跨网络访问
修改 bind 为 0.0.0.0
# 开启aof持久化
appendonly yes
# 进入bin目录中启动redis,指定配置文件
cd bin/
./redis-server ../redis.conf
redis启动后进入到bin目录中,执行以下命令进行性能测试:
# 执行测试性能命令
./redis-benchmark -t set,get -n 100000
说明:因为测试的是本机的redis性能,所以没有指定IP和端口号。
-t:表示执行以逗号分隔的命令,执行的是set操作和get操作,如果不指定具体的值,测试的结果较多
====== SET ======
100000 requests completed in 1.31 seconds
50 parallel clients
3 bytes payload
keep alive: 1
98.64% <= 1 milliseconds
99.85% <= 2 milliseconds
99.99% <= 3 milliseconds
100.00% <= 3 milliseconds
76335.88 requests per second
====== GET ======
100000 requests completed in 1.26 seconds
50 parallel clients
3 bytes payload
keep alive: 1
99.27% <= 1 milliseconds
100.00% <= 1 milliseconds
79365.08 requests per second
反馈结果:
SET部分和GET部分,只需要关注最后一句输出即可,以GET为例,上述输出:79365.08 requests per second,表示每秒的GET命令处理79365.08个请求,也就是QPS为7.9W个。
这里的数据都是理想数据,测试出来的QPS不能代表实际生产的处理能力,在实际生产中,服务器的硬件配置、网络状况、测试环境都会对Redis的性能有所影响。
在描述系统的高并发能力时,经常根据以下三个指标来决定:
在实际生产中,我们需要关心在应用场景中,redis能够处理的QPS是多少。我们需要估计生产的报文大小,使用benchmark工具指定-d数据块大小来模拟:
./redis-benchmark -t get -n 100000 -c 100 -d 2048
指定并发数为100,数据大小为2048字节,在实际生产中,每个业务处理的数据大小不一致,取出一个最大的数据为基数进行测试即可,在程序里将数据的字节大小打印出来,使用redis-benchmark的-d参数指定数据大小。
执行结果:
====== GET ======
100000 requests completed in 1.37 seconds
100 parallel clients
2048 bytes payload
keep alive: 1
94.15% <= 1 milliseconds
98.86% <= 2 milliseconds
99.80% <= 3 milliseconds
99.90% <= 4 milliseconds
99.92% <= 5 milliseconds
99.93% <= 6 milliseconds
99.96% <= 7 milliseconds
100.00% <= 8 milliseconds
100.00% <= 8 milliseconds
73206.44 requests per second
使用redis客户端登录到redis服务中,执行info命令查看redis的信息
# 使用Redis客户端
./redis-cli
# 在客户端中执行info命令
127.0.0.1:6379> info
查看结果,输出的信息较多,查看# Memory下面的一些信息。
connected_clients:108 #redis连接数
used_memory:8367424 # Redis 分配的内存总量
used_memory_human:7.98M
used_memory_rss:11595776 # Redis 分配的内存总量(包括内存碎片)
used_memory_rss_human:11.06M
used_memory_peak:8367424
used_memory_peak_human:7.98M #Redis所用内存的高峰值
used_memory_peak_perc:100.48%
需要关注used_memory_peak_human(redis已用内存)和used_memory(分配的内存总量),当used_memory_peak_human接近used_memory时就需要注意了。