欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2021年06月22日 08:18:28   作者:mushishi  
Redis本身是一個cs模式的tcp server, client可以通過一個socket連續(xù)發(fā)起多個請求命令。這篇文章帶領大家學習redis為什么要提供pipeline功能,需要的朋友可以參考下

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

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

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

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

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

redis是 client-server 模型,client客戶端將 command 通過tcp網(wǎng)絡連接發(fā)送到 server服務端,服務端執(zhí)行完 command 后將響應再通過 tcp 連接發(fā)送給client;

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

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

比如

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

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

除此之外,減少了網(wǎng)絡讀寫次數(shù)的同時,也減少了 redis-server 內(nèi)核態(tài)和用戶態(tài)的上下文切換,進一步提高了性能

性能提升了多少?

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 里一批命令的數(shù)量不要過多,以免服務端內(nèi)存壓力過大

其實,減少網(wǎng)絡io次數(shù)的處理技巧還是比較常見的,如

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

參考:

https://redis.io/topics/pipelining

https://redis.io/topics/benchmarks

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

相關文章

  • 保證Redis中存儲的Token安全性的示例詳解

    保證Redis中存儲的Token安全性的示例詳解

    確保Redis中存儲的Token安全性是一個多層面的任務,涉及到網(wǎng)絡、應用、數(shù)據(jù)和操作等多個方面的安全措施,本文給大家介紹了一些詳細的實踐建議和示例,并有詳細的代碼供大家參考,需要的朋友可以參考下
    2024-03-03
  • Redis RDB技術底層原理詳解

    Redis RDB技術底層原理詳解

    為了使Redis在重啟之后仍能保證數(shù)據(jù)不丟失,需要將數(shù)據(jù)從內(nèi)存中以某種形式同步到硬盤中,這一過程就是持久化,本文重點給大家介紹Redis RDB技術底層原理實現(xiàn)方法,一起看看吧
    2021-09-09
  • redis執(zhí)行redis命令的方法教程

    redis執(zhí)行redis命令的方法教程

    這篇文章主要給大家介紹了在redis中執(zhí)行redis命令的方法教程,文中詳細介紹了關于Redis 命令及在遠程服務上執(zhí)行命令的方法,介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • Redis集群的離線安裝步驟及原理詳析

    Redis集群的離線安裝步驟及原理詳析

    這篇文章主要給大家介紹了關于Redis集群的離線安裝步驟及原理的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Redis具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • 解決Redis開啟遠程訪問及密碼問題

    解決Redis開啟遠程訪問及密碼問題

    這篇文章主要介紹了Redis開啟遠程訪問及密碼的教程,文中給大家提到了Redis啟動報錯解決方法,需要的朋友可以參考下
    2019-10-10
  • redis獲取所有key的方法

    redis獲取所有key的方法

    本文主要介紹了redis獲取所有key的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • RedisTemplate常用操作方法總結(set、hash、list、string等)

    RedisTemplate常用操作方法總結(set、hash、list、string等)

    本文主要介紹了RedisTemplate常用操作方法總結,主要包括了6種常用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • redis?lua腳本解決高并發(fā)下秒殺場景

    redis?lua腳本解決高并發(fā)下秒殺場景

    這篇文章主要為大家介紹了redis?lua腳本解決高并發(fā)下秒殺場景,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • Redis+攔截器實現(xiàn)接口防刷

    Redis+攔截器實現(xiàn)接口防刷

    接口防刷有很多種實現(xiàn)思路,例如:攔截器/AOP+Redis、攔截器/AOP+本地緩存、前端限制等等很多種實現(xiàn)思路,本文主要來講一下?攔截器+Redis?的實現(xiàn)方式,需要的可以參考下
    2023-08-08
  • Redis 實現(xiàn)“附近的人”功能

    Redis 實現(xiàn)“附近的人”功能

    Redis基于geohash和有序集合提供了地理位置相關功能。這篇文章主要介紹了Redis 實現(xiàn)“附近的人”功能,需要的朋友可以參考下
    2019-11-11

最新評論