百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

看看 Jmeter 是如何玩转 redis 数据库的

mhr18 2024-11-11 12:03 24 浏览 0 评论

Jmeter 作为当前非常受欢迎的接口测试和性能测试的工具,在企业中得到非常广泛的使用,而 Redis 作为缓存数据库,也在企业中得到普遍使用,那如何使用 jmeter 来测试 Redis 数据库呢?今天我们就来讲一讲怎么使用 jmeter 来调用 Redis。

jmeter 准备

由于 jmeter 本身并没有带有 Redis 的测试入口,我们需要去安装 Redis 插件。

首先,我们下载 jmeter-plugins-manager-1.6.jar 文件,放到 jmeter 的 lib 的 ext 文件夹中,然后重启 jmeter。

然后,在‘选项’菜单下,点击‘plugin manager’,打开插件管理弹窗,选择‘Available Plugins’,在搜索框中,输入 Redis

然后,选中‘Redis Data Set’,点击‘Apply Changes and Restart JMeter’

带自动下载后重启 jmeter。

然后,在 jmeter 的线程组上右键,添加 > 配置元件 > jp@gc - Redis Data Set

此时,已经可以通过 jmeter 配置连接 Redis 数据库了。如果你已经有了 Redis 数据库,那你就直接可以在当前的界面中进行相关的配置,如果你还没有 Redis 数据库,就需要安装 Redis 数据库。

安装 Redis 数据库

安装 Redis 数据库的方法很多,那使用 docker 方式的安装,可能是最简单的,下面我就用 docker 的方式来安装 Redis 数据库。

  docker run -itd --name jmeter-redis \
-p 6779:6379  \ 
daocloud.io/library/redis:3.2.8-alpine redis-server --appendonly yes

好了,现在有了 Redis 数据库,该往数据库里面插入一些数据了。

  # 进入容器
docker exec -it jmeter-redis /bin/sh

# 命令模式,连接redis
redis-cli

# 插入列表数据
lpush course jmeter,loadruner
lpush course wrk,ab
lpush course locust,ngrinder

现在,Redis 数据库库中,已经有了一个列表 course,我们可以在 jmeter 中,获取它的数据。

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

字段

用法

默认值

minIdle

至少有多少个处于空闲状态的 Redis 实例

0

maxIdle

一个线程池最多有多少个处于空闲状态的 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 无用)

GROW

testOnBorrow

在 borrow 一个 Redis 实例时,是否提前进行 alidate 操作;如果为 true,则得到的 Redis 实例均是可用的

False

testOnReturn

在 return 给 pool 时,是否提前进行 validate 操作

False

testWhileIdle

如果为 true,表示有一个 idle object evitor 线程对 idle object 进行扫描,如果 validate 失败,此 object 会被从 pool 中 drop 掉;这一项只有在 timeBetweenEvictionRunsMillis 大于 0 时才有意义

False

timeBetweenEvictionRunsMillis

表示 idle object evitor 两次扫描之间要 sleep 的毫秒数

30000

numTestsPerEvictionRun

表示 idle object evitor 每次扫描的最多的对象数

0

minEvictableIdleTimeMillis

表示一个对象至少停留在 idle 状态的最短时间,然后才能被 idle object evitor 扫描并驱逐;这一项只有在 timeBetweenEvictionRunsMillis 大于 0 时才有意义

60000

softMinEvictableIdleTimeMillis

在 minEvictableIdleTimeMillis 基础上,加入了至少 minIdle 个对象已经在 pool 里面了。如果为-1,evicted 不会根据 idle time 驱逐任何对象。如果 minEvictableIdleTimeMillis>0,则此项设置无意义,且只有在 timeBetweenEvictionRunsMillis 大于 0 时才有意义

60000




接下来我们添加调试取样器,在名称中引用 Redis 变量名称。然后,线程组循环次数设置多次。

运行

我们看到,获得了 Redis 的数据。

jmeter 向 Redis 中写数据

上面呢,我们已经有讲到了,怎么来获取 Redis 数据库里面的数据?那接下来呢,我们给大家讲一下如何向 Redis 数据库里面写入数据。

首先,我们下载 jedis 的 jar 包, 把下载的包,放入 jmeter 的 lib 文件夹下,重启 jmeter

然后,在 jmeter 中,新增一个线程组,添加‘jsr223 sampler’

  import redis.clients.jedis.Jedis;

Jedis jedis = new Jedis("81.69.228.171", 6679);
jedis.set("foo","bar");
String value = jedis.get("foo");

运行脚本

从 Redis 数据库中确认,数据已经入库

好了,通过 jmeter 写入数据和获取数据的方法都讲了,你学会了吗?

相关推荐

Java培训机构,你选对了吗?(java培训机构官网)

如今IT行业发展迅速,不仅是大学生,甚至有些在职的员工都想学习java开发,需求量的扩大,薪资必定增长,这也是更多人选择java开发的主要原因。不过对于没有基础的学员来说,java技术不是一两天就能...

产品经理MacBook软件清单-20个实用软件

三年前开始使用MacBookPro,从此再也不想用Windows电脑了,作为生产工具,MacBook可以说是非常胜任。作为产品经理,值得拥有一台MacBook。MacBook是工作平台,要发挥更大作...

RAD Studio(Delphi) 本月隆重推出新的版本12.3

#在头条记录我的2025#自2024年9月,推出Delphi12.2版本后,本月隆重推出新的版本12.3,RADStudio12.3,包含了Delphi12.3和C++builder12.3最...

图解Java垃圾回收机制,写得非常好

什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用...

Centos7 初始化硬盘分区、挂载(针对2T以上)添加磁盘到卷

1、通过命令fdisk-l查看硬盘信息:#fdisk-l,发现硬盘为/dev/sdb大小4T。2、如果此硬盘以前有过分区,则先对磁盘格式化。命令:mkfs.文件系统格式-f/dev/sdb...

半虚拟化如何提高服务器性能(虚拟化 半虚拟化)

半虚拟化是一种重新编译客户机操作系统(OS)将其安装在虚拟机(VM)上的一种虚拟化类型,并在主机操作系统(OS)运行的管理程序上运行。与传统的完全虚拟化相比,半虚拟化可以减少开销,并提高系统性能。虚...

HashMap底层实现原理以及线程安全实现

HashMap底层实现原理数据结构:HashMap的底层实现原理主要依赖于数组+链表+红黑树的结构。1、数组:HashMap最底层是一个数组,称为table,它存放着键值对。2、链...

long和double类型操作的非原子性探究

前言“深入java虚拟机”中提到,int等不大于32位的基本类型的操作都是原子操作,但是某些jvm对long和double类型的操作并不是原子操作,这样就会造成错误数据的出现。其实这里的某些jvm是指...

数据库DELETE 语句,还保存原有的磁盘空间

MySQL和Oracle的DELETE语句与数据存储MySQL的DELETE操作当你在MySQL中执行DELETE语句时:逻辑删除:数据从表中标记为删除,不再可见于查询结果物理...

线程池—ThreadPoolExecutor详解(线程池实战)

一、ThreadPoolExecutor简介在juc-executors框架概述的章节中,我们已经简要介绍过ThreadPoolExecutor了,通过Executors工厂,用户可以创建自己需要的执...

navicat如何使用orcale(详细步骤)

前言:看过我昨天文章的同鞋都知道最近接手另一个国企项目,数据库用的是orcale。实话实说,也有快三年没用过orcale数据库了。这期间问题不断,因为orcale日渐消沉,网上资料也是真真假假,难辨虚...

你的程序是不是慢吞吞?GraalVM来帮你飞起来性能提升秘籍大公开

各位IT圈内外的朋友们,大家好!我是你们的老朋友,头条上的IT技术博主。不知道你们有没有这样的经历:打开一个软件,半天没反应;点开一个网站,图片刷不出来;或者玩个游戏,卡顿得想砸电脑?是不是特别上火?...

大数据正当时,理解这几个术语很重要

目前,大数据的流行程度远超于我们的想象,无论是在云计算、物联网还是在人工智能领域都离不开大数据的支撑。那么大数据领域里有哪些基本概念或技术术语呢?今天我们就来聊聊那些避不开的大数据技术术语,梳理并...

秒懂列式数据库和行式数据库(列式数据库的特点)

行式数据库(Row-Based)数据按行存储,常见的行式数据库有Mysql,DB2,Oracle,Sql-server等;列数据库(Column-Based)数据存储方式按列存储,常见的列数据库有Hb...

AMD发布ROCm 6.4更新:带来了多项底层改进,但仍不支持RDNA 4

AMD宣布,对ROCm软件栈进行了更新,推出了新的迭代版本ROCm6.4。这一新版本里,AMD带来了多项底层改进,包括更新改进了ROCm的用户空间库和AMDKFD内核驱动程序之间的兼容性,使其更容易...

取消回复欢迎 发表评论: