本文介绍: redis性能测试

测试工具准备

Jmeter作为当前非常受欢迎的接口测试和性能测试的工具,在企业中得到非常广泛的使用,而redis作为缓存数据库,也在企业中得到普遍使用,那如何使用jmeter来测试redis数据库呢?

本文讲述如何使用jmeter来调用redis,对redis进行读写操作,其他操作也可参考本文。

Jmeter准备
下载地址:https://jmeter.apache.org/

第一种方式:插件 目前未跑通

由于jmeter本身并没有带有redis的测试入口,我们需要去安装redis插件。
插件地址:https://jmeter-plugins.org/
首先,我们下载jmeter-plugins-manager-1.6.jar文件,放到jmeter的lib的ext文件夹中,然后重启jmeter。

然后,在‘选项’菜单下,点击‘plugin manager’,打开插件管理弹窗,选择‘Available Plugins’,在搜索框中,输入 redis
在这里插入图片描述
然后,选中‘Redis Data Set’,点击‘Apply Changes and Restart JMeter’
带自动下载redis所需的依赖后重启jmeter。
然后,在jmeter的线程组上右键,添加 > 配置元件 > jp@gc – Redis Data Set
在这里插入图片描述
此时,已经可以通过jmeter配置连接redis数据库了。如果你已经有了redis数据库,那你就直接可以在当前的界面中进行相关的配置,如果你还没有redis数据库,就需要安装redis数据库。

jmeter使用redis数据

在RedisDataSet中配置相关信息
在这里插入图片描述
Data Configuration
Redis key:Redis中的key,Redis数据库中列表(有序数据)或集(无序数据)的名称
Variable Names:由数据集导出到测试元素的变量的名称(设置取出来的value存放在哪个变量中)
Delimiter:存储在Redis列表或集合中的行中使用的分隔符(取出的value有多个值时,变量名之间的分隔符)
Date Sources Type:数据源类型,有List、Set两种选择
Recycle data on Flase: 数据是否重复使用

Connection Configuration
Redis server host:Redis服务器IP地址
Redis server port:Redis服务端口
Timeout for connect in ms: 连接超时时间,默认2000 ms
Password for connection:连接Redis的密码
Database:数据库名称,连接Redis的第几个数据库,默认为0

Redis Pool Configuration

字段 用法 默认值
minldle 至少有多少个处于空闲状态的redis实例 0
maxldle 一个线程池最多有多少个处于空闲状态的redis实例 10
maxActive 控制一个pool可分配多少个redis实例,通过pool.getResource()来获取;如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态就成exhausted 20
maxWait 表示当borrow一个redis实例时,最大的等待时间,如果超过等待时间,则直接抛出JedisconnectionException 30000
whenExhaustedAction 表示当pool中的redis实例都被allocated完时,pool要采取的操作;默认有三种WHEN_EXHAUSTED_FAIL(表示无redis实例时,直接抛出NoSuchElementException) . WHEN_EXHAUSTED_BLOCK(则表示阻塞住,或者达到maxWait时抛出JedisConnectionException) . WHEN_EXHAUSTED_GROW(则表示新建一个jedis实例,也就说设置的maxActive无用) False
testOnBorrow 在borrow一个redis实例时,是否提前进行alidate操作;如果为true,则得到的redis实例均是可用的 False
testOnReturn 在return给pool时,是否提前进行validate操作 False
testWhileldle 如果为true,表示有一个idle object evitor线程对idle object进行扫描,如果validate失败,此object会被从pool中drop掉;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义 False
timeBetweenEvictionRunsMillis 表示idle object evitor两次扫描之间要sleep的毫秒数 30000
numTestsPerEvictionRun 表示idle object evitor每次扫描的最多的对象数 0
minEvictableldleTimeMillis 表示一个对象至少停留在idle状态的最短时间,然后才能被idle object evitor扫描并驱逐;这一项只有在timeBetweenEvictionRunsMillis大于0时才有意义 60000
softMinEvictableldleTimeMillis 在minEvictableldleTimeMillis基础上,加入了至少minldle个对象已经在pool里面了。如果为-1,evicted不会根据idle time驱逐任何对象。如果minEvictableldleTimeMillis>0,则此项设置无意义,且只有在timeBetweenEvictionRunsMillis大于0时才有意义 60000

第二种方式:jar

直接下载依赖jar,下载后导入Jmeter安装目录的lib目录下,可先查看是否有jedis依赖的jar包,若有无需再下载。
jedis:https://mvnrepository.com/artifact/redis.clients/jedis/3.6.3

jedispool:https://mvnrepository.com/artifact/org.apache.commons/commons-pool2/2.9.0

读取测试

创建BeanShell取样器
脚本内容:

import redis.clients.jedis.Jedis;
import java.util.ArrayList;
import org.apache.commons.lang3.StringUtils;
 
String host = "127.0.0.1"; //服务器地址
 
int port = 6739; //端口号
 
String password = "password"; //redis密码
 
int index = 0; //redis db,默认为0
 
String key = "8841"; //key值,需要读取数据的键值
 
Jedis jedis = new Jedis(host, port);
 
if(StringUtils.isNotBlank(password)){
jedis.auth(password);
}
 
jedis.select(index); //选择redis  db
 
String value= jedis.get(key);  //通过key值获取对应value
 
vars.put("code",value);  //将获取的value值保存到jmeter变量code中

在这里插入图片描述

写入测试

创建JSR223 Sampler取样器
脚本内容:

import redis.clients.jedis.Jedis;
 
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.auth("password");
jedis.set("8841","bar");
String value = jedis.get("8841");

在这里插入图片描述

redis压力测试命令

1.redis-benchmark -h 127.0.0.1 -p 6379 -c 100 -n 100000(100个并发连接,100000个请求)
2.redis-benchmark -h 127.0.0.1 -p 6379 -q -d 100(存取大小为100字节的数据包)
3.redis-benchmark -t set, lpush -n 100000 -q (只测试某些操作的性能)
4.redis-benchmark -n 100000 -q script load “redis.call(set,‘foo’,‘bar’)(只测试某些数值存取的性能)

原文地址:https://blog.csdn.net/qq_42317054/article/details/131530853

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_51251.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注