You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Shing Hing Man <ma...@yahoo.com> on 2013/09/09 12:08:38 UTC
Performance difference between Camel spring redis and standalone Jedis
Hi,
I have written a standalone program PublishBenchmark.java (please see below) using Jedis to publish a 2K message to a Redis Channel 100,000 times.
I repeat the same process using Camel 2.11.1 Camel spring redis component (Please see RedisPublisherBenchmark.java below).
Below is timing for both.
Jedis : Time taken (in sec) to publish 100000 msgs=1.805
Camel spring redis : Time taken (in sec) to publish 100000 msgs=16.017
Is my configuration for Camel spring redis optimal ?
Is it expected that Camel spring redis about 8 times slower than a standalone Jedis program ?
Thanks in advance for any assistance !
Shing
public class RedisPublisherBenchmark {
public static void main(String[] args) throws Exception {
JedisShardInfo hostInfo = new JedisShardInfo("localhost", 6379);
hostInfo.setPassword("abc123");
final JedisConnectionFactory CONNECTION_FACTORY = new JedisConnectionFactory(
hostInfo);
RedisTemplate<String, String> redisTemplate = new RedisTemplate<String, String>();
redisTemplate.setConnectionFactory(CONNECTION_FACTORY);
// redisTemplate.afterPropertiesSet();
SimpleRegistry registry = new SimpleRegistry();
registry.put("redisTemplate", redisTemplate);
// To get rid of Hex padding
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());
// create CamelContext
CamelContext context = new DefaultCamelContext(registry);
Component direct = new DirectComponent();
context.addComponent("start", direct);
final String directEndPoint = "direct:start";
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start")
.to("spring-redis://localhost:6379?redisTemplate=#redisTemplate");
}
});
context.start();
ProducerTemplate template = context.createProducerTemplate();
final String payload = getPayload();
int NO_OF_MSGS= 100000;
final Processor processor = new RedisProcessor(payload);
long start = System.currentTimeMillis();
for (int i = 0; i <NO_OF_MSGS ; ++i) {
// Publish "Hello world" to a redis channel
Exchange exchange = template.send(directEndPoint, processor);
}
long end = System.currentTimeMillis();
double timeTaken = (end - start)/1000.0;
System.out.println(String.format("Time taken (in sec) to publish %s msgs=%s", NO_OF_MSGS,timeTaken));
System.out.println("Press any key to shutdown.");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
br.readLine();
// stop the CamelContext
context.stop();
}
private static String getPayload() {
String template = "name11:foo11";
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 170; ++i) {
sb.append(template);
}
return sb.toString();
}
private static class RedisProcessor implements Processor {
public String message;
public RedisProcessor(String message) {
this.message = message;
}
@Override
public void process(Exchange exchange) throws Exception {
Message in = exchange.getIn();
in.setHeader(RedisConstants.COMMAND, "PUBLISH");
in.setHeader(RedisConstants.CHANNEL, "msjscollector");
in.setHeader(RedisConstants.MESSAGE, message);
}
}
}
============================
public class PublishBenchmark {
private static final int NO_OF_MSGS = 100000;
public static void main(String[] args) throws UnknownHostException,
IOException {
Jedis jedis = new Jedis("localhost", 6379);
jedis.connect();
jedis.auth("abc123");
jedis.flushAll();
long begin = System.currentTimeMillis();
String payload = getPayload();
for (int n = 0; n <= NO_OF_MSGS; ++n) {
jedis.publish("msjscollector", payload);
}
double timeTaken = (System.currentTimeMillis() - begin)/1000.0;
jedis.disconnect();
System.out.println(String.format("Time taken (in sec) to publish %s msgs=%s", NO_OF_MSGS,timeTaken));
}
private static String getPayload(){
String template ="name11:foo11";
StringBuilder sb = new StringBuilder();
for (int i=0; i < 170; ++i){
sb.append(template);
}
return sb.toString();
}
}
Re: Performance difference between Camel spring redis and standalone Jedis
Posted by Christian Müller <ch...@gmail.com>.
May be Jedis is much more faster than Spring Redis? Can you compare these
both (without using Camel)?
Jedis is Apache license 2.0 [1], so we could offer a component for Jedis
too...
[1] http://code.google.com/p/jedis/
Best,
Christian
-----------------
Software Integration Specialist
Apache Camel committer: https://camel.apache.org/team
V.P. Apache Camel: https://www.apache.org/foundation/
Apache Member: https://www.apache.org/foundation/members.html
https://www.linkedin.com/pub/christian-mueller/11/551/642
On Mon, Sep 9, 2013 at 12:08 PM, Shing Hing Man <ma...@yahoo.com> wrote:
>
>
> Hi,
>
> I have written a standalone program PublishBenchmark.java (please see
> below) using Jedis to publish a 2K message to a Redis Channel 100,000
> times.
> I repeat the same process using Camel 2.11.1 Camel spring redis component
> (Please see RedisPublisherBenchmark.java below).
> Below is timing for both.
>
> Jedis : Time taken (in sec) to publish 100000 msgs=1.805
> Camel spring redis : Time taken (in sec) to publish 100000 msgs=16.017
>
> Is my configuration for Camel spring redis optimal ?
> Is it expected that Camel spring redis about 8 times slower than a
> standalone Jedis program ?
>
> Thanks in advance for any assistance !
>
> Shing
>
>
>
> public class RedisPublisherBenchmark {
>
> public static void main(String[] args) throws Exception {
>
> JedisShardInfo hostInfo = new JedisShardInfo("localhost", 6379);
> hostInfo.setPassword("abc123");
> final JedisConnectionFactory CONNECTION_FACTORY = new
> JedisConnectionFactory(
> hostInfo);
>
> RedisTemplate<String, String> redisTemplate = new
> RedisTemplate<String, String>();
> redisTemplate.setConnectionFactory(CONNECTION_FACTORY);
> // redisTemplate.afterPropertiesSet();
>
> SimpleRegistry registry = new SimpleRegistry();
> registry.put("redisTemplate", redisTemplate);
>
> // To get rid of Hex padding
> redisTemplate.setKeySerializer(new StringRedisSerializer());
> redisTemplate.setValueSerializer(new StringRedisSerializer());
>
> // create CamelContext
> CamelContext context = new DefaultCamelContext(registry);
> Component direct = new DirectComponent();
>
> context.addComponent("start", direct);
>
> final String directEndPoint = "direct:start";
>
> context.addRoutes(new RouteBuilder() {
> @Override
> public void configure() throws Exception {
> from("direct:start")
>
> .to("spring-redis://localhost:6379?redisTemplate=#redisTemplate");
> }
> });
> context.start();
>
> ProducerTemplate template = context.createProducerTemplate();
> final String payload = getPayload();
>
>
> int NO_OF_MSGS= 100000;
> final Processor processor = new RedisProcessor(payload);
>
> long start = System.currentTimeMillis();
>
> for (int i = 0; i <NO_OF_MSGS ; ++i) {
> // Publish "Hello world" to a redis channel
> Exchange exchange = template.send(directEndPoint, processor);
> }
>
> long end = System.currentTimeMillis();
> double timeTaken = (end - start)/1000.0;
>
> System.out.println(String.format("Time taken (in sec) to publish
> %s msgs=%s", NO_OF_MSGS,timeTaken));
>
> System.out.println("Press any key to shutdown.");
> BufferedReader br = new BufferedReader(new
> InputStreamReader(System.in));
> br.readLine();
>
> // stop the CamelContext
> context.stop();
> }
>
> private static String getPayload() {
> String template = "name11:foo11";
>
> StringBuilder sb = new StringBuilder();
> for (int i = 0; i < 170; ++i) {
> sb.append(template);
> }
>
> return sb.toString();
>
> }
>
> private static class RedisProcessor implements Processor {
>
> public String message;
>
> public RedisProcessor(String message) {
> this.message = message;
> }
>
> @Override
> public void process(Exchange exchange) throws Exception {
> Message in = exchange.getIn();
>
> in.setHeader(RedisConstants.COMMAND, "PUBLISH");
> in.setHeader(RedisConstants.CHANNEL, "msjscollector");
> in.setHeader(RedisConstants.MESSAGE, message);
>
> }
>
> }
>
> }
>
> ============================
>
> public class PublishBenchmark {
>
> private static final int NO_OF_MSGS = 100000;
>
> public static void main(String[] args) throws UnknownHostException,
> IOException {
> Jedis jedis = new Jedis("localhost", 6379);
> jedis.connect();
> jedis.auth("abc123");
> jedis.flushAll();
>
> long begin = System.currentTimeMillis();
>
> String payload = getPayload();
>
> for (int n = 0; n <= NO_OF_MSGS; ++n) {
> jedis.publish("msjscollector", payload);
>
> }
>
> double timeTaken = (System.currentTimeMillis() - begin)/1000.0;
>
> jedis.disconnect();
>
> System.out.println(String.format("Time taken (in sec) to publish
> %s msgs=%s", NO_OF_MSGS,timeTaken));
> }
>
>
> private static String getPayload(){
> String template ="name11:foo11";
>
> StringBuilder sb = new StringBuilder();
> for (int i=0; i < 170; ++i){
> sb.append(template);
> }
>
> return sb.toString();
>
>
> }
> }