摘要:服務端處理命令,并將結果返回給客戶端。這樣的連接可能非??煸谝粋€回路網絡中,也可能非常慢在廣域網上經過多個結點才能互通的兩個主機。
前言
Redis使用的是客戶端-服務器(CS)模型和請求/響應協議的TCP服務器。這意味著通常情況下一個請求會遵循以下步驟:
(1)客戶端向服務端發送一個查詢請求,并監聽Socket返回,通常是以阻塞模式,等待服務端響應。 (2)服務端處理命令,并將結果返回給客戶端。
客戶端和服務端通過網絡進行連接。這樣的連接可能非??欤ㄔ谝粋€回路網絡中),也可能非常慢(在廣域網上經過多個結點才能互通的兩個主機)。
但是無論是否存在網絡延遲,數據包從客戶端傳輸到服務端,以及客戶端從服務端獲得響應都需要花費一些時間。這段時間就稱為往返時延(Round Trip Time)。
因此當客戶端需要執行一串請求的時候,很容易看出它對性能的影響(例如往同一個隊列中加入大量元素,或者往數據庫中插入大量的鍵)。如果RTT時長為250毫秒(在基于廣域網的低速連接環境下),即使服務器每秒可以處理10萬個請求,但是實際上我們依然只能每秒處理最多4個請求。
如果處于一個回路網絡中,RTT時長則相當短(我的主機ping 127.0.0.1時只需要0.063ms),但是如果你執行一大串寫入請求的時候,還是會有點長。
如果需要一次執行多個redis命令,以往的方式需要發送多次命令請求,由redis服務器依次執行,并返回結果。
為了解決此類問題,設計者設計出了redis管道命令:客戶端可以向服務器發送多個請求,而不必等待回復,并最終在一個步驟中讀取回復返回給客戶端,從而大大增加了協議性能。
pipeline在php中的應用管道的開啟方式最主要是一條命令:$redis->pipeline()
批量給一個list類型的key添加10w條數據,實例如下:
connect("127.0.0.1", 6379); $redis->auth("******"); $redis->select(0); $redis->pipeline();//開啟管道 //假設變量$data數組有10w條數據,批量添加到list類型中 $data = array(1,2,3,...,100000); $key = "list1"; foreach($data as $value){ $redis->rpush($key,$value); }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/29596.html
摘要:首發于樊浩柏科學院的管道是用來打包多條無關命令批量執行,以減少多個命令分別執行帶來的網絡交互時間。在一些批量操作數據的場景,使用管道可以顯著提升的讀寫性能。這時,可以使用管道實現,也可以內嵌腳本實現。 首發于 樊浩柏科學院 Redis 的 管道 (pipelining)是用來打包多條無關命令批量執行,以減少多個命令分別執行帶來的網絡交互時間。在一些批量操作數據的場景,使用管道可以顯著...
摘要:連接提供兩個類和用于實現的命令,用于實現大部分官方的命令,并使用官方的語法和命令,是的子類,用于向后兼容舊版本的。如果使用關系數據庫來存儲點擊,可能存在大量的行級鎖爭用。 1、redis連接 redis提供兩個類Redis和StrictRedis用于實現Redis的命令,StrictRedis用于實現大部分官方的命令,并使用官方的語法和命令,Redis是StrictRedis的子類,用...
閱讀 1253·2023-04-25 18:57
閱讀 2138·2023-04-25 16:28
閱讀 3939·2021-11-24 09:39
閱讀 3638·2021-11-16 11:45
閱讀 1827·2021-10-13 09:40
閱讀 1266·2019-08-30 15:52
閱讀 1722·2019-08-30 10:57
閱讀 663·2019-08-29 16:55