0

私はredisを初めて使用し、次のリンクから始めました
http://www.aspieschool.com/wiki/index.php?title=Redis_vs_MySQL_(Benchmarks)これは、redisの読み取りにかかる時間がより短いこと
を示しています。しかし、私の場合、シナリオは正反対です。 私は次のコードを使用してmysqlに書き込みます:My sql writeredis writemysql read

<?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よりも高速であるというもう1つの説明は、PHP用のMySQLドライバーはネイティブドライバーであるのに対し、Predisは純粋なPHPで記述されているということです。しかし、Predisの遅さについて誰かが不満を言っているのを聞いたことがないので、それはまだ奇妙です。

つまりトラフィックの多い生産現場ではpredisを使用せず、代わりにPhpIRedisを使用してください。


完全開示:私はRedis用のGUIクライアントの創設者です:Redsmin

于 2013-03-02T11:52:08.650 に答える