JMeter Redis 数据集 vs CSV 数据集性能对比

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【2月更文挑战第27天】JMeter Redis 数据集 vs CSV 数据集性能对比

一、前言

我们可以看到大部分基于 JMeter 分布式压测平台大多数都将 JMeter 测试的测试数据保存在 CSV 文件中。
即使 CSV 文件是一个非常好的选择—通过让测试数据远离测试脚本,当你在分布式模式下使用 JMeter 时,它变得非常难以管理。你可能知道,JMeter 只是在所有从压测服务器中执行相同的 jmx 文件。因此,CSV文件,这是你的 JMeter 测试的依赖,也应该由您复制到所有的 slave 节点,有时,slave1 使用的测试数据不应该被 slave2 使用。在这种情况下,你需要将 CSV 文件分割为每个 slave 服务器的多个文件,并将它们移动到对应压测服务器,以成功运行测试。

在 JMeter 分布式模式测试中,Redis 是一个选择,因为它可以为所有 slave 提供数据。

image.png

二、什么是 Redis

REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。

三、对比测试

1、CSV Data Set config

首先,我创建了一个包含 100,000 条记录的非常简单的 CSV 文件。

    void createCsvDate() throws FileNotFoundException, UnsupportedEncodingException {
   
   
        int maximum = 1000000;
        PrintWriter writer = new PrintWriter("d:/redis-csv-compare.csv","UTF-8");
        for (int i=1;i<=maximum;i++){
   
   
            writer.println("name" + i + ",age" + i +",addresss" + i);
        }
        writer.close();
    }

我创建了一个简单的 JMeter 脚本测试来读取 CSV文件。
image.png

2、Redis Data Set config

现在让我们使用 Redis Data Set Config 做一个类似的测试。

首先确保安装了“Redis Data Set Config”插件。

让我们像在 CSV 中所做的那样在 Redis 中创建这 100,000 条记录。

    void createRedisDate(){
   
   
        //连接本地的redis,port如果没有修改可以不用传
        Jedis jedis = new Jedis("172.16.106.237");
//        System.out.println(jedis.getClient().getPort());
//        System.out.println("连接本地的Redis服务器成功");
//        //查看服务是否运行
//        System.out.println("服务正在运行:" + jedis.ping());
//
        int maximum = 1000000;

        for (int i=1;i<=maximum;i++){
   
   
            jedis.lpush("user-row","name" + i + ",age" + i +",addresss" + i);
        }
        jedis.close();
    }

我创建了一个非常简单的测试来使用 Redis 数据集配置而不是 CSV。其他一切都保持不变。
image.png

四、结果对比

在非 Gui 模式下运行测试:
image.png

测试结果:

  • 有 CSV 数据集配置的 JMeter 可以在一秒钟内读取 8.6 万条记录。
  • 有 Redis 数据集配置的 JMeter 能够在一秒钟内读取大约 2400 条记录,测试结果还不错。

影响因素:

  • Redis TPS 不高的原因是由于我在单独的机器上运行 Redis 服务器时的存在网络延迟,JMeter 连接到 redis 服务器去获取数据。
  • JMeter 测试中只有一个线程在运行。因此,JMeter 将向 Redis 发送 100,000 个请求以顺序读取数据。
  • 可以通过在同一台服务器上运行 JMeter 和 Redis 来做一个类似的测试,这样性能会好得多。但我们的目的是看看如何将 Redis 用于 JMeter 分布式测试。在这种情况下,Redis 必须在单独的机器上运行。这就是以这种方式测试的原因。
  • 建议你进行类似的测试并自己比较性能。结果对你来说可能完全不同,并且因你的机器配置而异。

五、总结

我预期这个结果,因为 CSV 文件在本地和 Redis DB 运行在网络的其他地方。网络延迟将在 Redis TPS 中扮演重要角色。因此,CSV 文件读取将比 Redis 更好。
然而,CSV 读取性能比 Redis 好 35 倍,这确实令人惊讶的。当你在使用 JMeter 测试来测试一个高 TPS 程序时能够非常小心,我们都需要小心在测试脚本中加入哪些元素。

源码地址:

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
1月前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
86 2
|
2月前
|
测试技术 持续交付 Apache
性能怪兽来袭!Python+JMeter+Locust,让你的应用性能飙升🦖
【8月更文挑战第5天】随着互联网应用规模增长,性能测试至关重要。本文介绍如何利用Python结合Apache JMeter和Locust构建高效可定制的性能测试框架。JMeter广泛用于负载测试,通过模拟大量虚拟用户并发访问来评估性能。Locust基于Python,通过编写简单脚本模拟HTTP请求,特别适合Web应用测试,比JMeter更灵活易扩展。Python作为胶水语言简化测试脚本编写并流畅自动化流程。文章提供JMeter命令行测试和Locust脚本示例,并展示如何用Python自动化执行和整合测试结果,最终帮助应用在高负载下稳定运行。
80 1
|
7天前
|
测试技术 持续交付 Apache
性能怪兽来袭!Python+JMeter+Locust,让你的应用性能飙升🦖
【10月更文挑战第10天】随着互联网应用规模的不断扩大,性能测试变得至关重要。本文将探讨如何利用Python结合Apache JMeter和Locust,构建高效且可定制的性能测试框架。通过介绍JMeter和Locust的使用方法及Python的集成技巧,帮助应用在高负载下保持稳定运行。
35 2
|
15天前
|
测试技术 持续交付 Apache
性能怪兽来袭!Python+JMeter+Locust,让你的应用性能飙升🦖
【10月更文挑战第2天】随着互联网应用规模的不断膨胀,性能测试变得至关重要。本文将介绍如何利用Python结合Apache JMeter和Locust构建高效且可定制的性能测试框架。Apache JMeter是一款广泛使用的开源负载测试工具,适合测试静态和动态资源;Locust则基于Python,通过编写简单的脚本模拟HTTP请求,更适合复杂的测试场景。
41 3
|
1月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
27天前
|
存储 缓存 NoSQL
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
深入探究Redis的AOF持久化:保障数据安全与恢复性能的关键机制
57 0
|
2月前
|
存储 Linux 数据库
性能工具之JMeter + Grafana + InfluxDB 性能平台搭建
【8月更文挑战第7天】性能工具之JMeter + Grafana + InfluxDB 性能平台搭建
64 1
性能工具之JMeter + Grafana + InfluxDB 性能平台搭建
|
2月前
|
监控 Java 测试技术
实战派必看!Python性能测试中,JMeter与Locust如何助力性能调优
【8月更文挑战第6天】性能优化是软件开发的关键。本文介绍JMeter与Locust两款流行性能测试工具,演示如何用于Python应用的性能调优。JMeter可模拟大量用户并发访问,支持多种协议;Locust用Python编写,易于定制用户行为并模拟高并发。根据场景选择合适工具,确保应用在高负载下的稳定运行。
116 4
|
2月前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【8月更文挑战第6天】在数字化时代,确保软件在高并发下的稳定性至关重要。Python 提供了强大的性能测试工具,如 JMeter 和 Locust。JMeter 可配置复杂请求场景,而 Locust 则以 Python 脚本灵活模拟真实用户行为。两者结合,可全面评估系统性能。例如,对电商网站进行测试时,JMeter 模拟登录请求,Locust 定义浏览和购物行为,共同揭示系统瓶颈并指导优化,从而保证稳定高效的用户体验。
93 1
|
2月前
|
NoSQL Redis C++
【Azure Redis】对Azure Redis服务指标解释(Connections Created/Closed Per Second VS Connected Clinents)
【Azure Redis】对Azure Redis服务指标解释(Connections Created/Closed Per Second VS Connected Clinents)