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

huangapple go评论120阅读模式
英文:

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

问题

  1. temp1Ctxtemp1Cancer := lib.GetTimeoutCtx(ctx)
  2. pipeline := util.RedisClusterClient.Pipeline()
  3. for _, key := range userIdRedisSlice {
  4. pipeline.HMGet(temp1Ctx, key, userIdRedisFeature...)
  5. }
  6. userProfileerr := pipeline.Exec(temp1Ctx)
  7. if err != nil {
  8. lib.ErrorLogger.Errorf(": %v\n", err)
  9. }
  10. defer temp1Cancer()
  11. // lib.ErrorLogger.Infof(": %v", userProfile)
  12. for _, redisCmd := range userProfile {
  13. //TODO
  14. }

如何从中获取值?我找不到任何文档......

英文:
  1. temp1Ctx, temp1Cancer := lib.GetTimeoutCtx(ctx)
  2. pipeline := util.RedisClusterClient.Pipeline()
  3. for _, key := range userIdRedisSlice {
  4. pipeline.HMGet(temp1Ctx, key, userIdRedisFeature...)
  5. }
  6. userProfile, err := pipeline.Exec(temp1Ctx)
  7. if err != nil {
  8. lib.ErrorLogger.Errorf(": %v\n", err)
  9. }
  10. defer temp1Cancer()
  11. // lib.ErrorLogger.Infof(": %v", userProfile)
  12. for _, redisCmd := range userProfile {
  13. //TODO
  14. }

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

答案1

得分: 2

保留HMGet返回的具体命令类型:

  1. temp1Ctx, temp1Cancer := lib.GetTimeoutCtx(ctx)
  2. pipeline := util.RedisClusterClient.Pipeline()
  3. cmds := []*redis.SliceCmd{}
  4. for _, key := range userIdRedisSlice {
  5. cmds = append(cmds, pipeline.HMGet(temp1Ctx, key, userIdRedisFeature...))
  6. }
  7. if _, err := pipeline.Exec(temp1Ctx); err != nil {
  8. lib.ErrorLogger.Errorf(": %v\n", err)
  9. }
  10. defer temp1Cancer()
  11. for _, c := range cmds {
  12. // 使用 c.Result()
  13. // 或者使用 c.Scan
  14. }

或者使用类型断言/类型切换将Cmder转换为具体类型:

  1. temp1Ctx, temp1Cancer := lib.GetTimeoutCtx(ctx)
  2. pipeline := util.RedisClusterClient.Pipeline()
  3. for _, key := range userIdRedisSlice {
  4. pipeline.HMGet(temp1Ctx, key, userIdRedisFeature...)
  5. }
  6. userProfile, err := pipeline.Exec(temp1Ctx)
  7. if err != nil {
  8. lib.ErrorLogger.Errorf(": %v\n", err)
  9. }
  10. defer temp1Cancer()
  11. for _, redisCmd := range userProfile {
  12. switch c := redisCmd.(type) {
  13. case *redis.SliceCmd:
  14. // 使用 c.Result()
  15. // 或者 c.Scan()
  16. }
  17. }
英文:

Either retain the concrete command type returned by HMGet

  1. temp1Ctx, temp1Cancer := lib.GetTimeoutCtx(ctx)
  2. pipeline := util.RedisClusterClient.Pipeline()
  3. cmds := []*redis.SliceCmd{}
  4. for _, key := range userIdRedisSlice {
  5. cmds = append(cmds, pipeline.HMGet(temp1Ctx, key, userIdRedisFeature...))
  6. }
  7. if _, err := pipeline.Exec(temp1Ctx); err != nil {
  8. lib.ErrorLogger.Errorf(": %v\n", err)
  9. }
  10. defer temp1Cancer()
  11. for _, c := range cmds {
  12. // use c.Result()
  13. // or use c.Scan
  14. }

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

  1. temp1Ctx, temp1Cancer := lib.GetTimeoutCtx(ctx)
  2. pipeline := util.RedisClusterClient.Pipeline()
  3. for _, key := range userIdRedisSlice {
  4. pipeline.HMGet(temp1Ctx, key, userIdRedisFeature...)
  5. }
  6. userProfile, err := pipeline.Exec(temp1Ctx)
  7. if err != nil {
  8. lib.ErrorLogger.Errorf(": %v\n", err)
  9. }
  10. defer temp1Cancer()
  11. for _, redisCmd := range userProfile {
  12. switch c := redisCmd.(type) {
  13. case *redis.SliceCmd:
  14. // use c.Result()
  15. // or c.Scan()
  16. }
  17. }

huangapple
  • 本文由 发表于 2021年7月1日 19:06:59
  • 转载请务必保留本文链接:https://go.coder-hub.com/68209052.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定