You are not logged in.

  • Login

Monday, September 20th 2010, 8:24pm

Tags

memcached, nosql, redis

Abstract

In diesem Artikel werden die PHP Clients von Redis und Memcached gegeneinander verglichen.

Article

Benchmarks wurden jeweils mit folgendem Code durchgefürt. Wurden also
explizit über den Apachen gejat.

Bash

1
time `i=1; while [ $i -le 1000 ]; do wget -q -O /dev/null "http://localhost/Memcached/exec-set.php?argv[1]=$i&argv[2]=$i"; let i=$i+1; done`


1. php5-memcached (1.0.0-1build1)


PHP Quellcode

1
2
3
4
5
6
7
$cluster = new Memcached();
$cluster->addServers(array(
       array('localhost', 11211)
));
$cluster->setOption(Memcached::OPT_LIBKETAMA_COMPATIBLE, true);
 
$cluster->set($_GET['argv'][1], $_GET['argv'][2]);


1.1. sets


Source code

1
2
3
real    0m4.900s
user    0m1.330s
sys     0m2.460s


1.2. gets


Source code

1
2
3
real    0m4.882s
user    0m1.180s
sys     0m2.760s


2. phpredis (1.0, 2010-09-17)


PHP Quellcode

1
2
3
4
$cluster = new Redis();
$cluster->connect('127.0.0.1', 6379);
 
$cluster->set($_GET['argv'][1], $_GET['argv'][2]);


2.1. sets


Source code

1
2
3
real    0m5.013s
user    0m1.190s
sys     0m2.440s


2.2. gets


Source code

1
2
3
real    0m4.396s
user    0m1.250s
sys     0m2.090s


3. Predis (0.7.0-dev)


PHP Quellcode

1
2
3
4
5
6
7
8
require_once('Predis.php');
$cluster = new Predis\Client(array(
       'host'     => '127.0.0.1',
       'port'     => 6379,
       'database' => 15
));
 
$cluster->set($_GET['argv'][1], $_GET['argv'][2]);


3.1. sets


Source code

1
2
3
real    0m12.884s
user    0m0.960s
sys     0m1.570s


3.2. gets


Source code

1
2
3
real    0m12.513s
user    0m0.870s
sys     0m1.770s


4. Rediska (0.5.0)


PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
require_once('library/Rediska.php');
 
$options = array('servers' => array(
       array(
               'host'     => '127.0.0.1',
               'port'     => 6379
       )
));
 
$cluster = new Rediska($options);
 
$cluster->set($_GET['argv'][1], $_GET['argv'][2]);


4.1. sets


Source code

1
2
3
real    0m10.201s
user    0m1.520s
sys     0m3.400s


4.2. gets


Source code

1
2
3
real    0m10.218s
user    0m1.940s
sys     0m3.320s


5. Ergebnisse


Will man auf Performance gehen, kommt man nicht um die C-Implementierungen der Redis Clients herum. Diese sind in der Tat genauso schnell wie Memcached.
Die PHP Implementierung sind trotz aktiviertem APC Caching mit großem Abstand langsamer. Sowohl Rediska als auch Predis bringen über 160 Klassen mit.
Rediska nutzt dagegen ein besseres Autoloading - wohingegen Preis alle Klassen in den Speicher lädt.

Lexikon 4.1.5, developed by www.viecode.com