如何从golang go-redis中的redis.Cmder获取价值?

Posted

技术标签:

【中文标题】如何从golang go-redis中的redis.Cmder获取价值?【英文标题】:How to get get value from redis.Cmder in golang go-redis? 【发布时间】: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
    

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

【问题讨论】:

【参考方案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()
    

【讨论】:

以上是关于如何从golang go-redis中的redis.Cmder获取价值?的主要内容,如果未能解决你的问题,请参考以下文章

Golang 入门系列Redis的使用

golang 如何连接redis --- 2022-04-03

如何在go-redis中正确使用select db

golang通过redis调用rust

golang通过redis调用rust

golang 将结构体存入redis