Skip to content

Commit 69554c0

Browse files
committed
Reduce number of allocations.
1 parent b9cc17b commit 69554c0

File tree

11 files changed

+158
-92
lines changed

11 files changed

+158
-92
lines changed

bench_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func BenchmarkRedisPing(b *testing.B) {
3737
})
3838
}
3939

40-
func BenchmarkRedisSet(b *testing.B) {
40+
func BenchmarkRedisSetString(b *testing.B) {
4141
client := benchmarkRedisClient(10)
4242
defer client.Close()
4343

cluster.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ func (c *ClusterClient) cmdSlotAndNode(state *clusterState, cmd Cmder) (int, *cl
378378
return 0, node, err
379379
}
380380

381-
cmdInfo := c.cmds[cmd.arg(0)]
381+
cmdInfo := c.cmds[cmd.name()]
382382
firstKey := cmd.arg(cmdFirstKeyPos(cmd, cmdInfo))
383383
slot := hashtag.Slot(firstKey)
384384

command.go

Lines changed: 62 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ var (
3333
type Cmder interface {
3434
args() []interface{}
3535
arg(int) string
36+
name() string
3637

3738
readReply(*pool.Conn) error
3839
setErr(error)
@@ -83,7 +84,7 @@ func cmdString(cmd Cmder, val interface{}) string {
8384
}
8485

8586
func cmdFirstKeyPos(cmd Cmder, info *CommandInfo) int {
86-
switch cmd.arg(0) {
87+
switch cmd.name() {
8788
case "eval", "evalsha":
8889
if cmd.arg(2) != "0" {
8990
return 3
@@ -92,7 +93,7 @@ func cmdFirstKeyPos(cmd Cmder, info *CommandInfo) int {
9293
}
9394
}
9495
if info == nil {
95-
internal.Logf("info for cmd=%s not found", cmd.arg(0))
96+
internal.Logf("info for cmd=%s not found", cmd.name())
9697
return -1
9798
}
9899
return int(info.FirstKeyPos)
@@ -126,6 +127,16 @@ func (cmd *baseCmd) arg(pos int) string {
126127
return s
127128
}
128129

130+
func (cmd *baseCmd) name() string {
131+
if len(cmd._args) > 0 {
132+
// Cmd name must be lower cased.
133+
s := internal.ToLower(cmd.arg(0))
134+
cmd._args[0] = s
135+
return s
136+
}
137+
return ""
138+
}
139+
129140
func (cmd *baseCmd) readTimeout() *time.Duration {
130141
return cmd._readTimeout
131142
}
@@ -156,7 +167,7 @@ type Cmd struct {
156167

157168
func NewCmd(args ...interface{}) *Cmd {
158169
return &Cmd{
159-
baseCmd: newBaseCmd(args),
170+
baseCmd: baseCmd{_args: args},
160171
}
161172
}
162173

@@ -193,8 +204,9 @@ type SliceCmd struct {
193204
}
194205

195206
func NewSliceCmd(args ...interface{}) *SliceCmd {
196-
cmd := newBaseCmd(args)
197-
return &SliceCmd{baseCmd: cmd}
207+
return &SliceCmd{
208+
baseCmd: baseCmd{_args: args},
209+
}
198210
}
199211

200212
func (cmd *SliceCmd) Val() []interface{} {
@@ -228,8 +240,9 @@ type StatusCmd struct {
228240
}
229241

230242
func NewStatusCmd(args ...interface{}) *StatusCmd {
231-
cmd := newBaseCmd(args)
232-
return &StatusCmd{baseCmd: cmd}
243+
return &StatusCmd{
244+
baseCmd: baseCmd{_args: args},
245+
}
233246
}
234247

235248
func (cmd *StatusCmd) Val() string {
@@ -258,8 +271,9 @@ type IntCmd struct {
258271
}
259272

260273
func NewIntCmd(args ...interface{}) *IntCmd {
261-
cmd := newBaseCmd(args)
262-
return &IntCmd{baseCmd: cmd}
274+
return &IntCmd{
275+
baseCmd: baseCmd{_args: args},
276+
}
263277
}
264278

265279
func (cmd *IntCmd) Val() int64 {
@@ -289,10 +303,9 @@ type DurationCmd struct {
289303
}
290304

291305
func NewDurationCmd(precision time.Duration, args ...interface{}) *DurationCmd {
292-
cmd := newBaseCmd(args)
293306
return &DurationCmd{
307+
baseCmd: baseCmd{_args: args},
294308
precision: precision,
295-
baseCmd: cmd,
296309
}
297310
}
298311

@@ -327,9 +340,8 @@ type TimeCmd struct {
327340
}
328341

329342
func NewTimeCmd(args ...interface{}) *TimeCmd {
330-
cmd := newBaseCmd(args)
331343
return &TimeCmd{
332-
baseCmd: cmd,
344+
baseCmd: baseCmd{_args: args},
333345
}
334346
}
335347

@@ -364,8 +376,9 @@ type BoolCmd struct {
364376
}
365377

366378
func NewBoolCmd(args ...interface{}) *BoolCmd {
367-
cmd := newBaseCmd(args)
368-
return &BoolCmd{baseCmd: cmd}
379+
return &BoolCmd{
380+
baseCmd: baseCmd{_args: args},
381+
}
369382
}
370383

371384
func (cmd *BoolCmd) Val() bool {
@@ -414,16 +427,17 @@ func (cmd *BoolCmd) readReply(cn *pool.Conn) error {
414427
type StringCmd struct {
415428
baseCmd
416429

417-
val string
430+
val []byte
418431
}
419432

420433
func NewStringCmd(args ...interface{}) *StringCmd {
421-
cmd := newBaseCmd(args)
422-
return &StringCmd{baseCmd: cmd}
434+
return &StringCmd{
435+
baseCmd: baseCmd{_args: args},
436+
}
423437
}
424438

425439
func (cmd *StringCmd) Val() string {
426-
return cmd.val
440+
return internal.BytesToString(cmd.val)
427441
}
428442

429443
func (cmd *StringCmd) Result() (string, error) {
@@ -467,7 +481,7 @@ func (cmd *StringCmd) String() string {
467481
}
468482

469483
func (cmd *StringCmd) readReply(cn *pool.Conn) error {
470-
cmd.val, cmd.err = cn.Rd.ReadStringReply()
484+
cmd.val, cmd.err = cn.Rd.ReadBytesReply()
471485
return cmd.err
472486
}
473487

@@ -480,8 +494,9 @@ type FloatCmd struct {
480494
}
481495

482496
func NewFloatCmd(args ...interface{}) *FloatCmd {
483-
cmd := newBaseCmd(args)
484-
return &FloatCmd{baseCmd: cmd}
497+
return &FloatCmd{
498+
baseCmd: baseCmd{_args: args},
499+
}
485500
}
486501

487502
func (cmd *FloatCmd) Val() float64 {
@@ -510,8 +525,9 @@ type StringSliceCmd struct {
510525
}
511526

512527
func NewStringSliceCmd(args ...interface{}) *StringSliceCmd {
513-
cmd := newBaseCmd(args)
514-
return &StringSliceCmd{baseCmd: cmd}
528+
return &StringSliceCmd{
529+
baseCmd: baseCmd{_args: args},
530+
}
515531
}
516532

517533
func (cmd *StringSliceCmd) Val() []string {
@@ -545,8 +561,9 @@ type BoolSliceCmd struct {
545561
}
546562

547563
func NewBoolSliceCmd(args ...interface{}) *BoolSliceCmd {
548-
cmd := newBaseCmd(args)
549-
return &BoolSliceCmd{baseCmd: cmd}
564+
return &BoolSliceCmd{
565+
baseCmd: baseCmd{_args: args},
566+
}
550567
}
551568

552569
func (cmd *BoolSliceCmd) Val() []bool {
@@ -580,8 +597,9 @@ type StringStringMapCmd struct {
580597
}
581598

582599
func NewStringStringMapCmd(args ...interface{}) *StringStringMapCmd {
583-
cmd := newBaseCmd(args)
584-
return &StringStringMapCmd{baseCmd: cmd}
600+
return &StringStringMapCmd{
601+
baseCmd: baseCmd{_args: args},
602+
}
585603
}
586604

587605
func (cmd *StringStringMapCmd) Val() map[string]string {
@@ -615,8 +633,9 @@ type StringIntMapCmd struct {
615633
}
616634

617635
func NewStringIntMapCmd(args ...interface{}) *StringIntMapCmd {
618-
cmd := newBaseCmd(args)
619-
return &StringIntMapCmd{baseCmd: cmd}
636+
return &StringIntMapCmd{
637+
baseCmd: baseCmd{_args: args},
638+
}
620639
}
621640

622641
func (cmd *StringIntMapCmd) Val() map[string]int64 {
@@ -650,8 +669,9 @@ type ZSliceCmd struct {
650669
}
651670

652671
func NewZSliceCmd(args ...interface{}) *ZSliceCmd {
653-
cmd := newBaseCmd(args)
654-
return &ZSliceCmd{baseCmd: cmd}
672+
return &ZSliceCmd{
673+
baseCmd: baseCmd{_args: args},
674+
}
655675
}
656676

657677
func (cmd *ZSliceCmd) Val() []Z {
@@ -689,7 +709,7 @@ type ScanCmd struct {
689709

690710
func NewScanCmd(process func(cmd Cmder) error, args ...interface{}) *ScanCmd {
691711
return &ScanCmd{
692-
baseCmd: newBaseCmd(args),
712+
baseCmd: baseCmd{_args: args},
693713
process: process,
694714
}
695715
}
@@ -738,8 +758,9 @@ type ClusterSlotsCmd struct {
738758
}
739759

740760
func NewClusterSlotsCmd(args ...interface{}) *ClusterSlotsCmd {
741-
cmd := newBaseCmd(args)
742-
return &ClusterSlotsCmd{baseCmd: cmd}
761+
return &ClusterSlotsCmd{
762+
baseCmd: baseCmd{_args: args},
763+
}
743764
}
744765

745766
func (cmd *ClusterSlotsCmd) Val() []ClusterSlot {
@@ -857,8 +878,9 @@ type GeoPosCmd struct {
857878
}
858879

859880
func NewGeoPosCmd(args ...interface{}) *GeoPosCmd {
860-
cmd := newBaseCmd(args)
861-
return &GeoPosCmd{baseCmd: cmd}
881+
return &GeoPosCmd{
882+
baseCmd: baseCmd{_args: args},
883+
}
862884
}
863885

864886
func (cmd *GeoPosCmd) Val() []*GeoPos {
@@ -902,8 +924,9 @@ type CommandsInfoCmd struct {
902924
}
903925

904926
func NewCommandsInfoCmd(args ...interface{}) *CommandsInfoCmd {
905-
cmd := newBaseCmd(args)
906-
return &CommandsInfoCmd{baseCmd: cmd}
927+
return &CommandsInfoCmd{
928+
baseCmd: baseCmd{_args: args},
929+
}
907930
}
908931

909932
func (cmd *CommandsInfoCmd) Val() map[string]*CommandInfo {

0 commit comments

Comments
 (0)