导读:
[导读] 最近签到功能并发量有点大,php的slow log里记录的大部分日志都是关于redis的,我们线上环境是通过predis连接redis服务器的,phpredis是C预言扩展,理论上要比predis快,所以做了一下性能对比
先回复读取命令。
1.本地 pipe VS default
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
php
require __DIR__.'/predis/autoload.php' ;
function getMillisecond() {
list($s1, $s2) = explode(' ', microtime());
return (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000);
}
$client = new PredisClient([
'scheme' => 'tcp',
'host' => '127.0.0.1',
'port' => 6379
]);
$sTime = getMillisecond() ;
for ($i=0; $i < 100000; $i++) {
// $result = $client->set('admin', 'gjx') ;
$result = $client->get('admin') ;
}
$eTime = getMillisecond() ;
var_dump($eTime-$sTime) ;
$sTime = getMillisecond() ;
$responses = $client->pipeline(function ($pipe) {
for ($i = 0; $i < 100000; $i++) {
// $pipe->set('admin', 'gjx') ;
$pipe->get("admin");
}
});
$eTime = getMillisecond() ;
var_dump($eTime-$sTime) ;
|
取三组数据:
记录 |
tcp |
pipe |
1 |
5366 |
1474 |
2 |
5587 |
1491 |
3 |
5804 |
1511 |
取平均数:tcp:5585.7毫秒 pipe:1492.0毫秒
pipe模式快于tcp将近75%,这仅仅是本机测试结果而已。
2.下面看看真正网络传输情况下的对比:
这次连接 ip为:192.168.0.210 局域网内的机器,为了能尽快的出现结果,将循环数改为10000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
php
require __DIR__.'/predis/autoload.php' ;
function getMillisecond() {
list($s1, $s2) = explode(' ', microtime());
return (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000);
}
$client = new PredisClient([
'scheme' => 'tcp',
'host' => '192.168.0.210',
'port' => 6379
]);
$sTime = getMillisecond() ;
for ($i=0; $i < 10000; $i++) {
// $result = $client->set('admin', 'gjx') ;
$result = $client->get('admin') ;
}
$eTime = getMillisecond() ;
var_dump($eTime-$sTime) ;
$sTime = getMillisecond() ;
$responses = $client->pipeline(function ($pipe) {
for ($i = 0; $i < 10000; $i++) {
// $pipe->set('admin', 'gjx') ;
$pipe->get("admin");
}
});
$eTime = getMillisecond() ;
var_dump($eTime-$sTime) ;
|
取三组数据:
记录 |
tcp |
pipe |
1 |
29071 |
127 |
2 |
29540 |
143 |
3 |
29160 |
124 |
取平均数:tcp:29257.0毫秒 pipe:131.3毫秒
这次可以看出pipeling的绝对优势了!所以将互不影响的操作能够放到pipeling里能绝对的提升性能!