【问题标题】:How to get get value from redis.Cmder in golang go-redis?如何从golang go-redis中的redis.Cmder获取价值?
【发布时间】:2021-09-13 10:56:13
【问题描述】:
    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
    }

如何从中获取价值?我没有找到任何文件.......

【问题讨论】:

    标签: go go-redis


    【解决方案1】:

    要么保留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
    }
    

    或 type-assert / type-switch 将 Cmder 转换为具体类型。

    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()
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-08-08
      • 2013-01-16
      • 1970-01-01
      • 2015-05-17
      • 1970-01-01
      • 2021-09-28
      • 2021-06-04
      • 2022-01-24
      • 2017-10-01
      相关资源
      最近更新 更多