2013-02-28 3 views
0

Я новичок в Redis и начал со следующей ссылке
http://www.aspieschool.com/wiki/index.php?title=Redis_vs_MySQL_(Benchmarks)
, который показывает, что My sql write занимает меньше времени, чем redis write и Redis читать занимает меньше времени, чем mysql read. но в моем случае сценарий просто противоположный.
Я использую следующий код для записи в MySQL:
Redis в/с PHP MySQL

<?php 
$con=mysql_connect("localhost","root",""); 
if(!$con) 
{ 
    die('unable to connect '); 
} 
mysql_select_db("redistest",$con); 
for($i=0;$i<100000;$i++){ 
    $query = "insert into `test`(`name`) values ('Rohit')"; 
    mysql_query($query); 
} 
?> 

Это занимает около 3 минут и в Redis Я использую код следующим образом:

require 'predis-0.8/autoload.php'; 

$single_server = array(
    'host'  => '127.0.0.1', 
    'port'  => 6379, 
    'database' => 15 
); 

$multiple_servers = array(
    array(
     'host'  => '127.0.0.1', 
     'port'  => 6379, 
     'database' => 15, 
     'alias' => 'first', 
    ), 
    array(
     'host'  => '127.0.0.1', 
     'port'  => 6380, 
     'database' => 15, 
     'alias' => 'second', 
    ), 
); 

// simple set and get scenario 
$time_start = microtime(true); 
$client = new Predis\Client($single_server); 
$client->flushall(); 
for($i=0;$i<5000;$i++){ 
echo $client->lPush('key8', 'C'); 
echo "<br>"; 
} 
//$retval = $client->get('rohit'); 
//$ass = array(); 
//$ass = $client->lrange('key8',0,-1); 
//foreach($ass as $ass) 
//echo "<br/>$ass"; 
$time_end = microtime(true); 

$diff = $time_end - $time_start; 
echo "<br/>".$diff; 
//var_dump($retval); 

и оно принимает около 1.292163848877 секунды:

в чтении из MySQL:

<?php 
$time_start = microtime(true); 
$con=mysql_connect("localhost","root",""); 
if(!$con) 
{ 
    die('unable to connect '); 
} 
mysql_select_db("redistest",$con); 
$sql="select * from `test`"; 
$result = mysql_query($sql); 
while($results = mysql_fetch_array($result)) 
{ 
    foreach($results as $results) 
     $results."<br/>"; 
} 
$time_end = microtime(true); 

$diff = $time_end - $time_start; 
echo "<br/>".$diff; 
?> 

он занимает около 0.040173053741455 секунд

И с помощью Redis:

$time_start = microtime(true); 
$client = new Predis\Client($single_server); 
//$client->flushall(); 
//for($i=0;$i<5000;$i++){ 
//echo $client->lPush('key8', 'C'); 
//echo "<br>"; 
//} 
//$retval = $client->get('rohit'); 
$ass = array(); 
$ass = $client->lrange('key8',0,-1); 
foreach($ass as $ass) 
//echo "<br/>$ass"; 
$time_end = microtime(true); 

$diff = $time_end - $time_start; 
echo "<br/>".$diff; 

Это примерно принимая время 0.13404297828674 сек. Может ли кто-нибудь предложить мне, где я ошибаюсь?

+0

Я мало знаю о redis, но вы можете увеличить скорость записи mysql массивно, если у вас есть таблицы innodb и сделайте вкладку внутри транзакции. – Masse

ответ

0

TL; 0: Этот показатель не стоит смотреть. Так много переменных (сетевая латентность, собственное расширение против не-родного, ACID ...) не учитываются, и сравнение MySQL с Redis не имеет никакого смысла.


Первое первых, я подозреваю, что база данных MySQL является InnoDB один, поэтому вставки занимает так много времени.

Ваши результаты чувствуют себя гораздо более справедливо для меня, чем для бенчмарка. Redis, являющийся базой данных в памяти (с дополнительной долговечностью), всегда должен быть быстрее при записи ops, что база данных ACID, такая как MySQL. Жаль, что я не могу найти, какую версию Redis и MySQL использовали.

Другим объяснением того, что MySQL быстрее, чем Redis из PHP, является то, что драйвер MySQL для PHP является родным, а Predis написан на чистом PHP. Но это все еще странно, потому что я никогда не слышал о том, что кто-то жалуется на Медленность Предиса.

Короче говоря, не используйте predis in a high-traffic production site вместо PhpIRedis.


Полное раскрытие: Я основатель GUI Client for Redis: Redsmin.

Смежные вопросы