做了一个测试,redis队列,在2000个线程同时并发处理四万个简单消息时,推入队列会报错;
redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
从队列里面拿消息时,完全没问题,不报错;(可能是消息内容比较简单)
如果消息检入或者检出出错,做setnx锁,会严重限制速度;应该有容错错失,比如把异常的消息重新放入缓冲中,再进行一次推入或出列操作
机器的问题,吞吐量
入队时吞吐量是40000/66338 s 大概也有每秒六七千;
出队时吞吐量是40000/65047 s 多次尝试,大概比入队慢那么几秒
如果线程数>2000个,可能吞吐量更大;我想应该超过10000/s;
代码
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxActive(5000);
config.setMaxWait(1000*10);
config.setMaxIdle(300);
config.setTestOnBorrow(true);
public static void main(String[] args) throws PiRedisExecption, InterruptedException {
int count = 2000;
final CountDownLatch latch = new CountDownLatch(count);
final CountDownLatch latch2 = new CountDownLatch(count);
Random rand = new Random(5);
final List <Integer>list = new ArrayList<Integer>();
list.add(0);
Long start = 0L;
System.out.println(RedisManager.getInstance().len("a"));
// System.out.println(RedisManager.getInstance().del("a"));
for(int i=0;i<count;i++){
final int j = i;
if(i==count-1){
System.out.println("==============================");
start = System.currentTimeMillis();
}
new Thread(){
public void run(){
try {
latch.await();
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
for(int a=0;a<200;a++){
try {
// RedisManager.getInstance().lPush("a", j+"_"+a);
System.out.println(RedisManager.getInstance().rPop("a"));
///list.set(0, list.get(0)+1);
} catch (PiRedisExecption e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
System.out.println("-------------------");
latch2.countDown();
}
}.start();
latch.countDown();
}
latch2.await();
System.out.println("========"+(System.currentTimeMillis()-start));
System.out.println(RedisManager.getInstance().len("a"));
// for(int a = 0;a<count;a++){
// if(list.get(0)==count){}
// }
}
分享到:
相关推荐
文章可能涵盖了编写测试用例以验证Redis Stream消息队列在秒杀场景下的正确性和性能。测试应包括模拟大量并发请求,检查订单创建的正确性,以及验证在高负载下系统的稳定性和伸缩性。 总结,本文深入介绍了如何利用...
在.NET MVC应用中,使用Redis实现抢购队列是一种高效且可扩展的解决方案。Redis作为一个高性能的键值存储系统,其支持多种数据结构,如字符串、哈希表、列表、集合等,使得它非常适合用于构建高并发场景下的队列服务...
**Redis入门到精通系列之九:Redis实战(六)——基于Redis队列实现异步秒杀下单测试项目代码** 在本教程中,我们将探讨如何利用Redis的队列特性来实现一个高效的异步秒杀下单系统。秒杀活动是电商、营销活动中常见的...
3. **测试用例**:帮助验证消息队列的正确性,如生产消息、消费消息以及错误处理等。 4. **文档**:解释了项目的用途、安装步骤和使用方法。 要深入了解这个项目,你需要查看其源代码和文档,理解如何设置生产者和...
【MQ redis测试工具】是一种专为测试消息队列(MQ)与Redis集成而设计的实用工具。它无需安装,只需解压后即可直接运行,极大地简化了测试过程。这款工具的核心功能是允许用户输入要监听的Redis频道以及要发送的消息...
同时,它可能还包含了单元测试和示例用例,帮助开发者理解和使用这个延迟队列。 总的来说,这个Go延迟队列项目结合了Go语言的并发优势和Redis的数据结构特性,提供了一种灵活、可扩展的解决方案,适用于各种需要...
基于springboot+mybatis redis构建的在线抽奖系统,管理后台,采用队列处理,支持高并发 项目经过严格测试,确保可以运行! 基于springboot+mybatis redis构建的在线抽奖系统,管理后台,采用队列处理,支持高并发...
这些数据结构使得Redis能够处理多种复杂的数据操作,如范围查询、计数、队列等。此外,Redis还提供了事务(Transactions)、发布/订阅(Pub/Sub)模式、主从复制、持久化(包括RDB和AOF两种方式)以及地理空间索引等...
【实例简介】 C# StackExchange.Redis 操作封装类库,分别封装了Redis五大数据结构(String,Hash,List,Set,ZSet)的增删改查的操作方法,支持Async异步操作。支持Redis分库操作。...包括Redis队列操作测试
标题"node-queue:简单节点redis队列"表明这是一个用于Node.js的Redis队列库,旨在简化在Node.js应用中使用Redis作为队列后端的过程。通过这个库,开发者可以方便地创建生产者(Producer)来添加任务到队列,以及创建...
其次,需要创建消息接收者,用于接收从Redis队列中推送的消息。在这里,我们可以使用Autowired注解来消除set和get方法的使用,例如: ``` @Autowired public Receiver(CountDownLatch latch) { this.latch = latch;...
Redis 在测试过程中的使用 Redis 是一个开源的、基于内存...Redis 是一个功能强大且灵活的数据存储系统,在测试过程中可以用作缓存层、消息队列和会话存储等。使用 Redis 需要考虑数据的一致性、安全性和性能的优化。
在性能测试中,可能涉及到对Redis消息队列操作的性能评估,如发布消息的速度和消费消息的效率。 总结起来,进行“redis 性能测试”时,我们需要了解Redis的基本特性和Jedis的使用,通过自定义的测试程序评估Redis在...
Redis是一款高性能的键值对数据库,常用于缓存、消息队列、实时统计等多种场景。在初学Redis时,理解其基本概念、命令操作及应用实践是至关重要的。以下是对"redis简单测试"这一主题的详细说明。 1. **Redis简介** ...
本文将详细讲解如何利用异步Redis队列来实现高效的数据入库方法。 ### Redis简介 Redis是一个开源的使用ANSI C语言编写、支持网络、基于内存且可持久化的高性能键值对数据库。由于其出色的性能,Redis在处理大量...
这里的"redis 写的操作性能测试代码"主要涉及如何使用 Jedis 客户端来测试 Redis 的写入性能。以下是一些相关的知识点: 1. **Redis 写操作**: - `SET` 命令:基本的设置键值对操作,例如 `set("key", "value")`...
此外,`edu-demo-redis`可能是一个教育示例项目,用于演示如何在实际应用中使用Redis,例如设置缓存、处理队列等。 在学习Redis时,理解其数据类型(字符串、哈希、列表、集合、有序集合)和命令非常重要。例如,`...
2. **消息生产者**:生产者是向消息队列发送消息的组件,它通常使用Spring的`@Autowired`注解注入消息模板,并调用相关方法将消息发布到Redis队列。 3. **消息消费者**:消费者负责从消息队列中取出并处理消息。...
Redis是一款开源、高性能、键值对存储系统,常用于数据缓存、消息队列、数据库等场景。在进行Redis测试时,我们需要关注其性能、稳定性、数据一致性以及与其他系统的集成。Jedis是Java语言操作Redis的一个常用客户端...
Redis是一款高性能的键值对数据存储系统,常用于缓存、消息队列和实时数据分析等场景。在Java Web开发中,Redis与Java的集成是通过Jedis库来实现的,这是一个非常流行的Java客户端,用于连接和操作Redis服务器。在这...