1. 程式人生 > >redis 效能優化優化提升之管道(pipeline)

redis 效能優化優化提升之管道(pipeline)

redis  增加的管道(pipeline)功能
1、以前正常使用過程
客戶端向伺服器傳送查詢,並從套接字讀取,通常以阻塞的方式,用於伺服器響應。
伺服器處理命令並將響應傳送回客戶端。
       也就是每個命令都會有一來以往的過程
2、管道的意義
     如果能將連續執行的redis命令在操作完成後統一返回,就可以減少連線數,從來減少延遲時間,那麼管道也就產生了。
 	管道的基本含義是,客戶端可以向伺服器傳送多個請求,而不必等待回覆,並最終在一個步驟中讀取回復。

3、理論上可以減少不高於50%延遲,但是實際效果卻是減少了90%

<?php
set_time_limit(0);
ini_set('memory_limit','1024M');

$redis = new Redis();

G('1');
$redis->connect('127.0.0.1');
//不具備原子性 ,管道
$redis->pipeline();
for ($i=0;$i<100000 i="" redis-="">set("test_{$i}",pow($i,2));
    $redis->get("test_{$i}");
}
$redis->exec();
$redis->close();
G('1','e');


G('2');
$redis->connect('127.0.0.1');
//事物具備原子性
$redis->multi();
for ($i=0;$i<100000 i="" redis-="">set("test_{$i}",pow($i,2));
    $redis->get("test_{$i}");
}
$redis->exec();
$redis->close();
G('2','e');


//普通
G('3');
$redis->connect('127.0.0.1');
//事物具備原子性
for ($i=0;$i<100000 i="" redis-="">set("test_{$i}",pow($i,2));
    $redis->get("test_{$i}");
}
$redis->close();
G('3','e');

function G($star,$end = '')
{
    static $info = array();
    if (!empty($end))
    {
        $info[$end] = microtime(true);
        $sconds = $info[$end] - $info[$star];
        echo $sconds,"ms
";

    } else {
        $info[$star] =  microtime(true);
    }
}
?>
測試輸出的結果: 0.043839931488037ms 0.4456958770752ms 0.45916604995728ms 檢視原文:http://www.architecy.com/archives/280