Skip to content

Commit 2e3402d

Browse files
committed
Don't allocate tmp slice in txPipelineWriteMulti
1 parent c01b1dc commit 2e3402d

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

cluster.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1070,7 +1070,7 @@ func (c *ClusterClient) _processPipeline(ctx context.Context, cmds []Cmder) erro
10701070

10711071
err := node.Client.withConn(ctx, func(ctx context.Context, cn *pool.Conn) error {
10721072
err := cn.WithWriter(ctx, c.opt.WriteTimeout, func(wr *proto.Writer) error {
1073-
return writeCmd(wr, cmds...)
1073+
return writeCmds(wr, cmds)
10741074
})
10751075
if err != nil {
10761076
return err

command.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,19 @@ func cmdsFirstErr(cmds []Cmder) error {
4141
return nil
4242
}
4343

44-
func writeCmd(wr *proto.Writer, cmds ...Cmder) error {
44+
func writeCmds(wr *proto.Writer, cmds []Cmder) error {
4545
for _, cmd := range cmds {
46-
err := wr.WriteArgs(cmd.Args())
47-
if err != nil {
46+
if err := writeCmd(wr, cmd); err != nil {
4847
return err
4948
}
5049
}
5150
return nil
5251
}
5352

53+
func writeCmd(wr *proto.Writer, cmd Cmder) error {
54+
return wr.WriteArgs(cmd.Args())
55+
}
56+
5457
func cmdString(cmd Cmder, val interface{}) string {
5558
ss := make([]string, 0, len(cmd.Args()))
5659
for _, arg := range cmd.Args() {

redis.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ func (c *baseClient) pipelineProcessCmds(
411411
ctx context.Context, cn *pool.Conn, cmds []Cmder,
412412
) (bool, error) {
413413
err := cn.WithWriter(ctx, c.opt.WriteTimeout, func(wr *proto.Writer) error {
414-
return writeCmd(wr, cmds...)
414+
return writeCmds(wr, cmds)
415415
})
416416
if err != nil {
417417
return true, err
@@ -453,12 +453,22 @@ func (c *baseClient) txPipelineProcessCmds(
453453
return false, err
454454
}
455455

456+
var (
457+
multi = NewStatusCmd("multi")
458+
exec = NewSliceCmd("exec")
459+
)
460+
456461
func txPipelineWriteMulti(wr *proto.Writer, cmds []Cmder) error {
457-
multiExec := make([]Cmder, 0, len(cmds)+2)
458-
multiExec = append(multiExec, NewStatusCmd("MULTI"))
459-
multiExec = append(multiExec, cmds...)
460-
multiExec = append(multiExec, NewSliceCmd("EXEC"))
461-
return writeCmd(wr, multiExec...)
462+
if err := writeCmd(wr, multi); err != nil {
463+
return err
464+
}
465+
if err := writeCmds(wr, cmds); err != nil {
466+
return err
467+
}
468+
if err := writeCmd(wr, exec); err != nil {
469+
return err
470+
}
471+
return nil
462472
}
463473

464474
func txPipelineReadQueued(rd *proto.Reader, cmds []Cmder) error {

0 commit comments

Comments
 (0)