redis 效能優化優化提升之管道(pipeline)
阿新 • • 發佈:2018-12-25
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