【问题标题】:How to do Redis (redigo) lpop in golanggolang中如何做Redis(redigo)lpop
【发布时间】:2018-09-12 16:16:02
【问题描述】:

我需要从 redis 队列中执行一个简单的 lpop。 在 go lang 如果我使用 blpop 使用阻塞弹出,那么下面的代码可以工作

reply, err := redis.Strings(conn.Do("BLPOP", key, 1))
        if err == nil {         
           fmt.Println(reply[1])

        // do something with string reply[1]

       }

但我不想阻止。我只需要在队列为空时结束。 那我该怎么做 如果我这样做redis.Strings(conn.Do("LPOP", key)) 即将 BLPOP 更改为 LPOP,我得到一个 redigo 错误

ERROR = redigo: unexpected type for Strings, got type []uint8 

【问题讨论】:

    标签: go redis


    【解决方案1】:

    我可以使用 redis.String() 获得 lpop 的值

    这样就可以了

    reply, err := redis.String(conn.Do("LPOP", key))
        if err == nil { 
         fmt.Printf("REPLY= %s\n", reply)
          //do something 
    

    【讨论】:

      【解决方案2】:

      BLPOP 命令返回一个双元素数组,其中第一个元素是键,第二个值是弹出元素。

      LPOP 命令返回弹出的元素。

      使用 String 辅助函数获取弹出的元素:

      reply, err := redis.String(conn.Do("LPOP", key))
              if err == nil {         
                 fmt.Println(reply)
              // do something with string reply
             }
      

      【讨论】:

      • 不起作用 LPOP 不采用超时选项 我收到此错误 ERROR = ERR 'lpop' 命令的参数数量错误 此外,如果我只传递 2 个参数,那仍然不会给我字符串输出
      • 抱歉,这是一个复制和粘贴错误,带有 LPOP 的额外参数。固定的。关键是对于返回单个值的命令,你应该使用 redis.String。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 1970-01-01
      • 2022-01-02
      相关资源
      最近更新 更多