gogo-redis

How to get get value from redis.Cmder in golang go-redis?


    temp1Ctx, temp1Cancer := lib.GetTimeoutCtx(ctx)
    pipeline := util.RedisClusterClient.Pipeline()
    for _, key := range userIdRedisSlice {
        pipeline.HMGet(temp1Ctx, key, userIdRedisFeature...)
    }
    userProfile, err := pipeline.Exec(temp1Ctx)
    if err != nil {
        lib.ErrorLogger.Errorf(": %v\n", err)
    }
    defer temp1Cancer()
    // lib.ErrorLogger.Infof(": %v", userProfile)

    for _, redisCmd := range userProfile {
        //TODO
    }

How to get the value from it ? I don't find any document .......


Solution

  • Either retain the concrete command type returned by HMGet

    temp1Ctx, temp1Cancer := lib.GetTimeoutCtx(ctx)
    pipeline := util.RedisClusterClient.Pipeline()
    cmds := []*redis.SliceCmd{}
    for _, key := range userIdRedisSlice {
        cmds = append(cmds, pipeline.HMGet(temp1Ctx, key, userIdRedisFeature...))
    }
    if _, err := pipeline.Exec(temp1Ctx); err != nil {
        lib.ErrorLogger.Errorf(": %v\n", err)
    }
    defer temp1Cancer()
    
    for _, c := range cmds {
        // use c.Result()
        // or use c.Scan
    }
    

    or type-assert / type-switch the Cmder to the concrete type.

    temp1Ctx, temp1Cancer := lib.GetTimeoutCtx(ctx)
    pipeline := util.RedisClusterClient.Pipeline()
    for _, key := range userIdRedisSlice {
        pipeline.HMGet(temp1Ctx, key, userIdRedisFeature...)
    }
    userProfile, err := pipeline.Exec(temp1Ctx)
    if err != nil {
        lib.ErrorLogger.Errorf(": %v\n", err)
    }
    defer temp1Cancer()
    
    for _, redisCmd := range userProfile {
        switch c := redisCmd.(type) {
        case *redis.SliceCmd:
              // use c.Result()
              // or c.Scan()
        }
    }