0

我是 redis 的新手,从以下链接开始
http://www.aspieschool.com/wiki/index.php?title=Redis_vs_MySQL_(Benchmarks)
这表明My sql write花费的时间比redis writeredis 读取的时间短mysql read。但就我而言,情况正好相反。
我正在使用以下代码写入 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 秒。谁能建议我哪里出错了,?

4

1 回答 1

0

TL;DR:这个基准不值得一看。没有考虑这么多变量(网络延迟,针对非本地扩展的本地扩展,ACID ...),并且将 MySQL 与 Redis 进行比较没有任何意义。


首先,我怀疑您的 MySQL 数据库是 InnoDB 数据库,这就是插入需要这么多时间的原因。

你的结果对我来说比基准更正确。Redis 是一个内存数据库(具有可选的持久性),它的写入操作应该总是比 MySQL 等 ACID 数据库更快。太糟糕了,我找不到使用的 Redis 和 MySQL 版本。

MySQL 比 PHP 中的 Redis 更快的另一种解释是 PHP 的 MySQL 驱动程序是本机驱动程序,而 Predis 是用纯 PHP 编写的。但这仍然很奇怪,因为我从未听说有人抱怨 Predis 速度慢。

简而言之,不要高流量的生产站点中使用predis,而是使用 PhpIRedis。


全面披露:我是Redis 的 GUI 客户端:Redsmin的创始人。

于 2013-03-02T11:52:08.650 回答