【问题标题】:gomodule/redigo how can I push multiple keys to redisgomodule/redigo 如何将多个键推送到 redis
【发布时间】:2024-10-07 01:45:01
【问题描述】:

我正在尝试将多个元素推送到一个 redis 键。当前使用使用https://github.com/gomodule/redigo 的redis 池连接。

如果我尝试将一个数组放入 rpush ,则会推送一个连接数组的字符串。如何改为推送单个元素

conn := Pool.Get() // A redigo redis pool 
arr := []string{"a", "b", "c", "d"}
conn.Do("RPUSH","TEST","x","y") // This works
conn.Do("RPUSH", "TEST", arr) //This does not work

【问题讨论】:

    标签: go redis redigo


    【解决方案1】:

    我没有该库,但从我在他们的文档中看到的内容来看,我想这应该可以:

    conn.Do("RPUSH", arr...)
    

    ... 是一个参数运算符,它解包切片的元素并将它们作为单独的参数传递给可变参数函数,这与此相同:

    arr := []string{"TEST", "a", "b", "c", "d"}
    
    conn.Do("RPUSH", "TEST", arr[0], arr[1], arr[2], arr[3])
    

    关于可变参数函数的更多信息可以在 go in this very complete article中找到

    【讨论】:

    • args := []interface{"TEST"} 给我一个错误意外文字“TEST”,期望方法或接口名称
    • @ThunderCat 是的,对此并不确定。最后,他只需要将他的TEST 值也添加到arr 字符串中。编辑答案,谢谢
    【解决方案2】:

    构建参数切片并使用这些参数调用可变参数函数:

     args := []interface{"TEST")
     for _, v := range arr {
       args = append(args, v)
     }
     conn.Do("RPUSH", args...)
    

    Args 助手用一行应用程序代码做同样的事情:

     conn.Do("RPUSH", edis.Args{}.Add("TEST").AddFlat(arr)...)
    

    【讨论】: