2013-02-28 50 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创始人。