婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 你真的了解redis為什么要提供pipeline功能

你真的了解redis為什么要提供pipeline功能

熱門標簽:十堰營銷電銷機器人哪家便宜 北京400電話辦理收費標準 山東外呼銷售系統招商 超呼電話機器人 鄭州人工智能電銷機器人系統 魔獸2青云地圖標注 宿遷便宜外呼系統平臺 貴州電銷卡外呼系統 日本中國地圖標注

 Redis本身是一個cs模式的tcp server, client可以通過一個socket連續發起多個請求命令。 每個請求命令發出后client通常會阻塞并等待redis服務端處理,redis服務端處理完后將結果返回給client。

       redis的pipeline(管道)功能在命令行中沒有,但redis是支持pipeline的,而且在各個語言版的client中都有相應的實現。 由于網絡開銷延遲,即算redis server端有很強的處理能力,也由于收到的client消息少,而造成吞吐量小。當client 使用pipelining 發送命令時,redis server必須部分請求放到隊列中(使用內存)執行完畢后一次性發送結果;如果發送的命名很多的話,建議對返回的結果加標簽,當然這也會增加使用的內存;

       Pipeline在某些場景下非常有用,比如有多個command需要被“及時的”提交,而且他們對相應結果沒有互相依賴,而且對結果響應也無需立即獲得,那么pipeline就可以充當這種“批處理”的工具;而且在一定程度上,可以較大的提升性能,性能提升的原因主要是TCP鏈接中較少了“交互往返”的時間。不過在編碼時請注意,pipeline期間將“獨占”鏈接,此期間將不能進行非“管道”類型的其他操作,直到pipeline關閉;如果你的pipeline的指令集很龐大,為了不干擾鏈接中的其他操作,你可以為pipeline操作新建Client鏈接,讓pipeline和其他正常操作分離在2個client中。不過pipeline事實上所能容忍的操作個數,和socket-output緩沖區大小/返回結果的數據尺寸都有很大的關系;同時也意味著每個redis-server同時所能支撐的pipeline鏈接的個數,也是有限的,這將受限于server的物理內存或網絡接口的緩沖能力。

下面給大家普及redis為什么要提供pipeline功能。

通常我們用redis做接口緩存后,查詢接口的性能就能提升到ms級別;
但是redis是純內存操作啊,總不至于要到ms吧,根據官方的 benchmark 單實例也是能抗 7w+ qps 也就是說單個redis 操作在redis-server上耗時大概是 0.014ms,那時間是消耗到哪里去了?

redis是 client-server 模型,client客戶端將 command 通過tcp網絡連接發送到 server服務端,服務端執行完 command 后將響應再通過 tcp 連接發送給client;

對于應用服務來說,我們所關注的性能其實是客戶端時間,即前面的整個執行過程,雖然 redis-server 命令執行的非常快,但每次命令執行都需要在網絡上走一遭,按照我們公司redis客戶端中間件統計的rt,一次命令的執行平均是1ms 左右,那么網絡耗時占比: 1-0.014 / 1 = 0.98(98%!!! ) 可見,大部分時間都耗在網絡io上

所以,減少網絡io次數就能大大提供 redis-client 所感知的耗時,提升應用服務性能,redis提供的 pipeline 功能,讓我們可以提交一個命令后,不用等這個返回結果就可以繼續執行下一個命令,也就是說,可以執行多個命令后,一次性獲取所有結果; 這樣就大大減少了在網絡上的消耗

比如

Client: INCR X
Client: INCR X
Client: INCR X
Client: INCR X

Server: 1
Server: 2
Server: 3
Server: 4

除此之外,減少了網絡讀寫次數的同時,也減少了 redis-server 內核態和用戶態的上下文切換,進一步提高了性能

性能提升了多少?

redis官方聲稱pipeline可帶來10倍的性能提升

測試機Intel(R) Xeon(R) CPU E5520 @ 2.27GHz, 用pipeline比沒用pipeline性能提升了將近7倍

// 用pipeline
$ ./redis-benchmark -r 1000000 -n 2000000 -t get,set,lpush,lpop -P 16 -q
SET: 552028.75 requests per second
GET: 707463.75 requests per second
LPUSH: 767459.75 requests per second
LPOP: 770119.38 requests per second

// 沒用pipeline
SET: 122556.53 requests per second
GET: 123601.76 requests per second
LPUSH: 136752.14 requests per second
LPOP: 132424.03 requests per second

注意,使用pipeline的時候,多個命令的響應是緩存在server端的,所以在 pipeline 里一批命令的數量不要過多,以免服務端內存壓力過大

其實,減少網絡io次數的處理技巧還是比較常見的,如

  • CSS Sprites,將很多小圖標合并成一張圖片
  • jdbc batch api批量提交sql

參考:

https://redis.io/topics/pipelining

https://redis.io/topics/benchmarks

以上就是redis為什么要提供pipeline功能的詳細內容,更多關于redis pipeline的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:
  • Redis利用Pipeline加速查詢速度的方法
  • 在Redis集群中使用pipeline批量插入的實現方法
  • python使用pipeline批量讀寫redis的方法
  • redis通過pipeline提升吞吐量的方法
  • 詳解Java使用Pipeline對Redis批量讀寫(hmset&hgetall)
  • 詳解redis大幅性能提升之使用管道(PipeLine)和批量(Batch)操作

標簽:吉安 江蘇 大慶 果洛 北京 楊凌 臺州 朝陽

巨人網絡通訊聲明:本文標題《你真的了解redis為什么要提供pipeline功能》,本文關鍵詞  你,真的,了解,redis,為什么,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《你真的了解redis為什么要提供pipeline功能》相關的同類信息!
  • 本頁收集關于你真的了解redis為什么要提供pipeline功能的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 金山区| 分宜县| 津市市| 云南省| 囊谦县| 利辛县| 太白县| 梧州市| 成都市| 祁东县| 漠河县| 临清市| 上思县| 哈密市| 福清市| 浙江省| 若尔盖县| 庄浪县| 惠东县| 固镇县| 孟连| 五台县| 延安市| 元谋县| 枣强县| 错那县| 达尔| 仁怀市| 饶阳县| 读书| 稻城县| 东港市| 循化| 南溪县| 高州市| 交口县| 泗水县| 电白县| 澄江县| 台湾省| 绥棱县|