Redis是一種基于客戶端-服務端模型以及請求/響應協(xié)議的TCP服務诬乞。這意味著通常情況下一個請求會遵循以下步驟:
客戶端向服務端發(fā)送一個查詢請求先煎,并監(jiān)聽Socket返回助泽,通常是以阻塞模式楞慈,等待服務端響應旺嬉。
服務端處理命令败潦,并將結(jié)果返回給客戶端本冲。
Redis 管道技術可以在服務端未響應時,客戶端可以繼續(xù)向服務端發(fā)送請求劫扒,并最終一次性讀取所有服務端的響應檬洞。
Redis的管道(Pipelining)操作是一種異步的訪問模式,一次發(fā)送多個指令沟饥,不同步等待其返回結(jié)果添怔。這樣可以取得非常好的執(zhí)行效率。
$redis = new Redis();
$redis->connect('localhost',6379);
$redis->auth("1234567890");
$pipe=$redis->multi(Redis::PIPELINE);
for($i=?0 ; $i<??10000 ; $i++)?{
? ? ? ?$pipe->set("key::$i",str_pad($i,?4,'0',?0));
? ? ? ?$pipe->get("key::$i");
}
$replies=$pipe->exec();
print_r($replies);
正確使用pipeline對性能的提升十分明顯贤旷。我們曾經(jīng)某個后臺應用广料,逐個處理大約100萬條記錄需要幾十分鐘,經(jīng)過pileline壓縮請求數(shù)量后幼驶,最后時間縮小到20秒左右艾杏。做之前能預計提升性能,但是沒想到提升如此巨大盅藻。(來自網(wǎng)絡)