Having read a few articles on comparing redis with memcache. I decided to benchmark myself.
My setup:
Fedora 21,Nginx 1.6.2,redis 2.8.19,memcache 1.4.22,php-fpm 5.6.4.
My Benchmark script(php)
<?php
################# redis ###################################################
$k=0;
$t_time=0;
echo "Benchmark redis : ";
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$original_string = 'abcdefghijklmnopqrstuvwxyz';
for ($i=0;$i<=10000;$i++){
$random_string = get_random_string($original_string, 10);
$random_string2 = get_random_string($original_string, 10);
$a1[$i]=$random_string;
$a2[$random_string]=$random_string2;
}
$tstart=timer_start();
for ($i=0;$i<=10000;$i++){
$redis -> set($a1[$i],$a2[$a1[$i]]);
}
$t_time=timer_end($tstart);
echo "Total Set time: ".$t_time."
";
for ($j=0;$j<10;$j++){
$tstart=timer_start();
for ($i=0;$i<=10000;$i++){
$value=$redis -> get($a1[$i]);
}
$t_time=timer_end($tstart);
echo "Loop $j (Get) time: ".$t_time."
";
$k=$k+$t_time;
}
echo "Total 10 loop Get time $k
";
################# memcache ###################################################
$k=0;
$t_time=0;
echo "Benchmark memcache : ";
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211) or die ("Cannot connect");
$original_string = 'abcdefghijklmnopqrstuvwxyz';
for ($i=0;$i<=10000;$i++){
$random_string = get_random_string($original_string, 10);
$random_string2 = get_random_string($original_string, 10);
$a1[$i]=$random_string;
$a2[$random_string]=$random_string2;
}
$tstart=timer_start();
for ($i=0;$i<=10000;$i++){
$memcache->set($a1[$i], $a2[$a1[$i]], false, 20) or die ("Cannot save data");
}
$t_time=timer_end($tstart);
echo "Total Set time: ".$t_time."
";
for ($j=0;$j<10;$j++){
$tstart=timer_start();
for ($i=0;$i<=10000;$i++){
$value = $memcache->get($a1[$i]);
}
$t_time=timer_end($tstart);
echo "Loop $j (Get) time: ".$t_time."
";
$k=$k+$t_time;
}
echo "Total 10 loop Get time $k
";
function timer_start()
{ $time = microtime();
$time = explode(" ", $time);
$time = $time[1] + $time[0];
return $time;
}
function timer_end($start)
{ $time = microtime();
$time = explode(" ", $time);
$time = $time[1] + $time[0];
return $time-$start;
}
function get_random_string($valid_chars, $length)
{
$random_string = "";
$num_valid_chars = strlen($valid_chars);
for ($i = 0; $i < $length; $i++)
{
$random_pick = mt_rand(1, $num_valid_chars);
$random_char = $valid_chars[$random_pick-1];
$random_string .= $random_char;
}
return $random_string;
}
?>
Benchmark redis :
Total Set time: 0.12764096260071
Loop 0 (Get) time: 0.175616979599
Loop 1 (Get) time: 0.18264698982239
Loop 2 (Get) time: 0.13450312614441
Loop 3 (Get) time: 0.1352870464325
Loop 4 (Get) time: 0.13448214530945
Loop 5 (Get) time: 0.13312005996704
Loop 6 (Get) time: 0.15526604652405
Loop 7 (Get) time: 0.40630602836609
Loop 8 (Get) time: 0.13408994674683
Loop 9 (Get) time: 0.13564801216125
Total 10 loop Get time 1.726966381073
Benchmark memcache :
Total Set time: 0.14455795288086
Loop 0 (Get) time: 0.12623596191406
Loop 1 (Get) time: 0.13038897514343
Loop 2 (Get) time: 0.1564610004425
Loop 3 (Get) time: 0.11394095420837
Loop 4 (Get) time: 0.11402487754822
Loop 5 (Get) time: 0.11300802230835
Loop 6 (Get) time: 0.11119389533997
Loop 7 (Get) time: 0.1115710735321
Loop 8 (Get) time: 0.11155104637146
Loop 9 (Get) time: 0.19941091537476
Total 10 loop Get time 1.28778672218322
The results shows for simple Set and Get, redis is faster. For SET, redis is faster by 12% For GET, memcache is faster by 25%
For other functions,more extensive tests/benchmarks have to perform on both.
No comments :
Post a Comment