【redis專題(16)】管道pipline

[toc]php

簡述

Redis 管道技術能夠在服務端未響應時,客戶端能夠繼續向服務端發送請求,並最終一次性讀取全部服務端的響應。也就是屢次IO操做合併成一次IO操做。Redis 管道 (Pipeline) 自己並非 Redis 服務器直接提供的技術,這個技術本質上是由客戶端提供的,跟服務器沒有什麼直接的關係。python

使用管道前:redis

圖片描述

使用管道後:服務器

圖片描述

對於Redis來講,仍是須要進行3次子查詢,可是對於整個系統來講,網絡通訊的次數明顯就減小了,併發天然就上去了,吞吐天然也上去了。網絡

示例

管道技術通常應用在程序語言的客戶端中。注意:管道只是redis合併屢次IO操做的一個優化手段,並不具有原子性,隔離性等事務特性。可是在程序語言中,經常配合事務,提升IO性能。併發

python中工具

pipe = redis.pipeline(transaction=true)
pipe.multi()
pipe.incr("books")
pipe.incr("books")
values = pipe.execute()

php性能

多個命令一塊兒執行,multi默認的參數是經過事務,可選爲Redis::PIPELINE。管道模式並不能保證原子性,只能提升多個命令的傳輸速度。測試

$ret = $redis->multi(Redis::PIPELINE)
    ->set('key1', 'val1')
    ->get('key1')
    ->set('key2', 'val2')
    ->get('key2')
    ->exec();

壓測

Redis 自帶了一個壓力測試工具redis-benchmark,使用這個工具就能夠進行管道測試。優化

首先咱們對一個普通的 set 指令進行壓測,QPS 大約 5w/s。

> redis-benchmark -t set -q
SET: 51975.05 requests per second

咱們加入管道選項-P參數,它表示單個管道內並行的請求數量,看下面P=2,QPS 達到了 9w/s。

> redis-benchmark -t set -P 2 -q
SET: 91240.88 requests per second

若是CPU容許,還能夠再提升P的參數值進行測試;

相關文章
相關標籤/搜索