redis效能提升之pipeline

來源:互聯網
上載者:User

標籤:lin   php_eol   基本   原子性   line   管道   set   bool   print   

1、以前正常使用過程

用戶端向伺服器發送查詢,並從通訊端讀取,通常以阻塞的方式,用於伺服器響應。
伺服器處理命令並將響應發送回用戶端。
也就是每個命令都會有一來以往的過程

2、管道的意義
如果能將連續執行的redis命令在操作完成後統一返回,就可以減少串連數,從來減少延遲時間,那麼管道也就產生了。
管道的基本含義是,用戶端可以向伺服器發送多個請求,而不必等待回複,並最終在一個步驟中讀取回複。

3.參數說明:
Redis::MULTI或Redis::PIPELINE. 預設是 Redis::MULTI
Redis::MULTI:將多個操作當成一個事務執行
Redis::PIPELINE:讓(多條)執行命令簡單的,更加快速的發送給伺服器,但是沒有任何原子性的保證

測試代碼1:

<?phpset_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" ;        echo PHP_EOL;    } else {        $info[$star] = microtime(true);    }}

結果輸出:
0.85941696166992ms 14.938266992569ms 15.121881961823ms

測試代碼2:

<?php$redis = new Redis();$redis->connect(‘127.0.0.1‘, 6379);$pipe = $redis->multi(Redis::PIPELINE);for ($i = 0; $i < 3; $i++) {    $key = "key::{$i}";    print_r($pipe->set($key, str_pad($i, 2, ‘0‘, 0)));    echo PHP_EOL;    print_r($pipe->get($key));    echo PHP_EOL;}$result = $pipe->exec();echo "<pre>";var_dump($result);

輸出結果:
Redis Object ( ) Redis Object ( ) Redis Object ( ) Redis Object ( ) Redis Object ( ) Redis Object ( )
array(6) {
[0]=>
bool(true)
[1]=>
string(2) "00"
[2]=>
bool(true)
[3]=>
string(2) "01"
[4]=>
bool(true)
[5]=>
string(2) "02"
}

redis效能提升之pipeline

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.