Skip to content
Paul Horn edited this page Jul 29, 2014 · 1 revision

Benchmarks

I ran some completly unscientific, non significant benchmarks [^1].

I compared RxRedis against

(*): these clients only support synchronous, blocking operations

For every test, I would

  1. open a new connection
  2. send 250.000 PING requests
  3. close the connection

Each segment is professionally [^1] measured. I used asynchronous operations wherever possible, but waitet for the last PING to complete, before measuring the time. For every client, I startet a new VM, but did no warm-up rounds.

^1: System.currentTimeMillis()

Results

Finagle

Segment Time
Connection 600 ms
Requests 6.92 s
Shutdown 10 ms

~> PING @ 36100 Hz

Dependencies

Size: 16 MB

com.twitter:finagle-redis_2.10:6.18.0
+-com.twitter:finagle-core_2.10:6.18.0
| +-com.twitter:util-app_2.10:6.18.0
| | +-com.twitter:util-core_2.10:6.18.0
| |
| +-com.twitter:util-collection_2.10:6.18.0
| | +-com.google.code.findbugs:jsr305:2.0.1
| | +-com.google.guava:guava:16.0.1
| | +-com.twitter:util-core_2.10:6.18.0
| | +-commons-collections:commons-collections:3.2.1
| | +-javax.inject:javax.inject:1
| |
| +-com.twitter:util-core_2.10:6.18.0
| +-com.twitter:util-hashing_2.10:6.18.0
| +-com.twitter:util-jvm_2.10:6.18.0
| | +-com.twitter:util-app_2.10:6.18.0
| | | +-com.twitter:util-core_2.10:6.18.0
| | |
| | +-com.twitter:util-core_2.10:6.18.0
| |
| +-com.twitter:util-logging_2.10:6.18.0
| | +-com.twitter:util-app_2.10:6.18.0
| | | +-com.twitter:util-core_2.10:6.18.0
| | |
| | +-com.twitter:util-core_2.10:6.18.0
| |
| +-io.netty:netty:3.9.1.Final
|
+-com.twitter:util-logging_2.10:6.18.0
  +-com.twitter:util-app_2.10:6.18.0
  | +-com.twitter:util-core_2.10:6.18.0
  |
  +-com.twitter:util-core_2.10:6.18.0

Jedis

Segment Time
Connection 10 ms
Requests 10.77 s
Shutdown <1 ms

~> PING @ 23210 Hz

Dependencies

Size: 412 KB

redis.clients:jedis:2.5.1
+-org.apache.commons:commons-pool2:2.0

Redisson

Segment Time
Connection 200 ms
Requests 2.11 s
Shutdown 2.21 s

~> PING @ 118640 Hz

Dependencies

Size: 2.9 MB

org.redisson:redisson:1.1.5
+-com.fasterxml.jackson.core:jackson-core:2.3.3
+-com.fasterxml.jackson.core:jackson-databind:2.3.3
| +-com.fasterxml.jackson.core:jackson-annotations:2.3.0
| +-com.fasterxml.jackson.core:jackson-core:2.3.3
|
+-io.netty:netty-buffer:4.0.19.Final
| +-io.netty:netty-common:4.0.19.Final
|
+-io.netty:netty-codec-http:4.0.19.Final
| +-io.netty:netty-codec:4.0.19.Final
| | +-io.netty:netty-transport:4.0.19.Final
| |   +-io.netty:netty-buffer:4.0.19.Final
| |     +-io.netty:netty-common:4.0.19.Final
| |
| +-io.netty:netty-handler:4.0.19.Final
|   +-io.netty:netty-buffer:4.0.19.Final
|   | +-io.netty:netty-common:4.0.19.Final
|   |
|   +-io.netty:netty-codec:4.0.19.Final
|   | +-io.netty:netty-transport:4.0.19.Final
|   |   +-io.netty:netty-buffer:4.0.19.Final
|   |     +-io.netty:netty-common:4.0.19.Final
|   |
|   +-io.netty:netty-transport:4.0.19.Final
|     +-io.netty:netty-buffer:4.0.19.Final
|       +-io.netty:netty-common:4.0.19.Final
|
+-io.netty:netty-codec:4.0.19.Final
| +-io.netty:netty-transport:4.0.19.Final
|   +-io.netty:netty-buffer:4.0.19.Final
|     +-io.netty:netty-common:4.0.19.Final
|
+-io.netty:netty-common:4.0.19.Final
+-io.netty:netty-handler:4.0.19.Final
| +-io.netty:netty-buffer:4.0.19.Final
| | +-io.netty:netty-common:4.0.19.Final
| |
| +-io.netty:netty-codec:4.0.19.Final
| | +-io.netty:netty-transport:4.0.19.Final
| |   +-io.netty:netty-buffer:4.0.19.Final
| |     +-io.netty:netty-common:4.0.19.Final
| |
| +-io.netty:netty-transport:4.0.19.Final
|   +-io.netty:netty-buffer:4.0.19.Final
|     +-io.netty:netty-common:4.0.19.Final
|
+-io.netty:netty-transport:4.0.19.Final
| +-io.netty:netty-buffer:4.0.19.Final
|   +-io.netty:netty-common:4.0.19.Final
|
+-org.slf4j:slf4j-api:1.7.6

Scala-Redis

Segment Time
Connection 50 ms
Requests 12.67 s
Shutdown <1 ms

~> PING @ 19740 Hz

Dependencies

Size: 8.7 MB

net.debasishg:redisclient_2.11:2.13
+-com.typesafe.akka:akka-actor_2.11:2.3.2
| +-com.typesafe:config:1.2.0
| +-org.scala-lang:scala-library:2.11.0
|
+-commons-pool:commons-pool:1.6
+-org.slf4j:slf4j-api:1.7.2

RxRedis

Segment Time
Connection 220 ms
Requests 2.47 s
Shutdown 20 ms

~> PING @ 101200 Hz

Dependencies

Size: 7.4 MB

de.knutwalker:rx-redis-scala_2.11:0.3.0
+-com.netflix.rxjava:rxjava-scala:0.19.1
| +-com.netflix.rxjava:rxjava-core:0.19.1
|
+-de.knutwalker:rx-redis-client_2.11:0.3.0
  +-com.netflix.rxjava:rxjava-core:0.19.1
  +-de.knutwalker:rx-redis-pipeline_2.11:0.3.0
    +-de.knutwalker:rx-redis-core_2.11:0.3.0
    | +-org.scala-lang:scala-reflect:2.11.2
    |
    +-io.netty:netty-codec:4.0.21.Final
      +-io.netty:netty-transport:4.0.21.Final
        +-io.netty:netty-buffer:4.0.21.Final
          +-io.netty:netty-common:4.0.21.Final

Summary

You can make of it what you want. YMMV, and take it with a huge grain of salt. Personally, I am rather pleased :-)

Clone this wiki locally