@@ -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