2013-02-28 46 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的V/S 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的瞭解不多,但是如果您有innodb表並在事務中執行插入操作,您可以大幅增加mysql寫入速度。 – Masse 2013-03-04 09:10:17

回答

0

TL; DR:這個基準值不值得一看。沒有考慮到很多變量(網絡延遲,本機擴展與非本地擴展,ACID ...),將MySQL與Redis進行比較沒有任何意義。


首先,我懷疑你的MySQL數據庫是InnoDB的一個,這就是爲什麼插入需要這麼多時間。

你的結果比基準測試更適合我。 Redis是一個內存數據庫(具有可選的持久性),它在寫操作時應該總是比像MySQL這樣的ACID數據庫更快。太糟糕了,我無法找到使用Redis和MySQL的版本。

MySQL比MySQL的Redis更快的另一種解釋是PHP的MySQL驅動程序是本地驅動程序,而Predis是使用純PHP編寫的。但這仍然很奇怪,因爲我從來沒有聽說有人抱怨Predis緩慢。

總之不要用predis in a high-traffic production site改用PhpIRedis代替。


全披露:我的GUI Client for Redis: Redsmin創始人。