diff --git a/lib/pipeline.ts b/lib/pipeline.ts index e5ea2a59..ca436959 100644 --- a/lib/pipeline.ts +++ b/lib/pipeline.ts @@ -302,7 +302,8 @@ Pipeline.prototype.exec = function(callback: CallbackFunction) { .then(execPipeline); function execPipeline() { - let data: Buffer | string = ""; + let data = ""; + let buffers: Buffer[]; let writePending: number = (_this.replyPending = _this._queue.length); let node; @@ -319,25 +320,38 @@ Pipeline.prototype.exec = function(callback: CallbackFunction) { bufferMode = true; } if (bufferMode) { - data = Buffer.concat([ - typeof data === "string" ? Buffer.from(data, "utf8") : data, + if (!buffers) { + buffers = []; + } + if (typeof data === "string") { + buffers.push(Buffer.from(data, "utf8")); + data = undefined; + } + buffers.push( typeof writable === "string" ? Buffer.from(writable, "utf8") : writable - ]); + ); } else { data += writable; } if (!--writePending) { + let sendData: Buffer | string; + if (buffers) { + sendData = Buffer.concat(buffers); + } else { + sendData = data; + } if (_this.isCluster) { - node.redis.stream.write(data); + node.redis.stream.write(sendData); } else { - _this.redis.stream.write(data); + _this.redis.stream.write(sendData); } // Reset writePending for resending writePending = _this._queue.length; data = ""; + buffers = undefined; bufferMode = false; } }