Skip to content

Commit 616dd27

Browse files
committed
fix: reduce allocations
1 parent e4d6b50 commit 616dd27

File tree

1 file changed

+36
-14
lines changed

1 file changed

+36
-14
lines changed

helper.go

Lines changed: 36 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -279,16 +279,20 @@ func clusterMGet(client Client, ctx context.Context, keys []string) (ret map[str
279279
}
280280
cmds := mgetcmdsp.Get(0, len(slotCount))
281281
defer mgetcmdsp.Put(cmds)
282-
groups := make([][]string, 0, len(slotCount))
283-
for s, count := range slotCount {
284-
gkeys := make([]string, 0, count)
282+
for s := range slotCount {
283+
var builder any = client.B().Mget()
284+
var first = true
285285
for _, key := range keys {
286286
if slot(key) == s {
287-
gkeys = append(gkeys, key)
287+
if first {
288+
builder = builder.(intl.Mget).Key(key)
289+
first = false
290+
} else {
291+
builder = builder.(intl.MgetKey).Key(key)
292+
}
288293
}
289294
}
290-
cmds.s = append(cmds.s, client.B().Mget().Key(gkeys...).Build().Pin())
291-
groups = append(groups, gkeys)
295+
cmds.s = append(cmds.s, builder.(intl.MgetKey).Build().Pin())
292296
}
293297
resps := client.DoMulti(ctx, cmds.s...)
294298
defer resultsp.Put(&redisresults{s: resps})
@@ -297,7 +301,14 @@ func clusterMGet(client Client, ctx context.Context, keys []string) (ret map[str
297301
if err != nil {
298302
return nil, err
299303
}
300-
ret = arrayToKV(ret, arr, groups[i])
304+
s := cmds.s[i].Slot()
305+
var j int
306+
for _, key := range keys {
307+
if slot(key) == s {
308+
ret[key] = arr[j]
309+
j++
310+
}
311+
}
301312
}
302313
for i := range cmds.s {
303314
intl.PutCompletedForce(cmds.s[i])
@@ -316,16 +327,20 @@ func clusterJsonMGet(client Client, ctx context.Context, keys []string, path str
316327
}
317328
cmds := mgetcmdsp.Get(0, len(slotCount))
318329
defer mgetcmdsp.Put(cmds)
319-
groups := make([][]string, 0, len(slotCount))
320-
for s, count := range slotCount {
321-
gkeys := make([]string, 0, count)
330+
for s := range slotCount {
331+
var builder any = client.B().JsonMget()
332+
var first = true
322333
for _, key := range keys {
323334
if slot(key) == s {
324-
gkeys = append(gkeys, key)
335+
if first {
336+
builder = builder.(intl.JsonMget).Key(key)
337+
first = false
338+
} else {
339+
builder = builder.(intl.JsonMgetKey).Key(key)
340+
}
325341
}
326342
}
327-
cmds.s = append(cmds.s, client.B().JsonMget().Key(gkeys...).Path(path).Build().Pin())
328-
groups = append(groups, gkeys)
343+
cmds.s = append(cmds.s, builder.(intl.JsonMgetKey).Path(path).Build().Pin())
329344
}
330345
resps := client.DoMulti(ctx, cmds.s...)
331346
defer resultsp.Put(&redisresults{s: resps})
@@ -334,7 +349,14 @@ func clusterJsonMGet(client Client, ctx context.Context, keys []string, path str
334349
if err != nil {
335350
return nil, err
336351
}
337-
ret = arrayToKV(ret, arr, groups[i])
352+
s := cmds.s[i].Slot()
353+
var j int
354+
for _, key := range keys {
355+
if slot(key) == s {
356+
ret[key] = arr[j]
357+
j++
358+
}
359+
}
338360
}
339361
for i := range cmds.s {
340362
intl.PutCompletedForce(cmds.s[i])

0 commit comments

Comments
 (0)