首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用redigo库从golang查询Redis db

如何使用redigo库从golang查询Redis db
EN

Stack Overflow用户
提问于 2014-10-13 22:47:58
回答 2查看 10.8K关注 0票数 4

我正在尝试找出在一个命令中查询Redis db以获得多个键的最佳方法。我见过可以用于redis-cli的MGET。而是如何使用GOlang代码中的redigo库来做到这一点。假设我有一个键的数组,并且我想在一个查询中从Redis db中获取这些键的所有值。

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-13 23:01:10

假设c是一个Redigo连接,而keys是您的密钥的[]字符串:

代码语言:javascript
复制
var args []interface{}
for _, k := range keys {
    args = append(args, k)
}
values, err := redis.Strings(c.Do("MGET", args...))
if err != nil {
    // handle error
}
for _, v := range values {
   fmt.Println(v)
}

常见问题解答explains why you need to copy the keys。该规范描述了如何使用pass a slice to a variadic param

票数 7
EN

Stack Overflow用户

发布于 2014-10-13 23:23:19

http://play.golang.org/p/FJazj_PuCq

代码语言:javascript
复制
func main() {
    // connect to localhost, make sure to have redis-server running on the default port
    conn, err := redis.Dial("tcp", ":6379")
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    // add some keys
    if _, err = conn.Do("SET", "k1", "a"); err != nil {
        log.Fatal(err)
    }
    if _, err = conn.Do("SET", "k2", "b"); err != nil {
        log.Fatal(err)
    }
    // for fun, let's leave k3 non-existing

    // get many keys in a single MGET, ask redigo for []string result
    strs, err := redis.Strings(conn.Do("MGET", "k1", "k2", "k3"))
    if err != nil {
        log.Fatal(err)
    }

    // prints [a b ]
    fmt.Println(strs)

    // now what if we want some integers instead?
    if _, err = conn.Do("SET", "k4", "1"); err != nil {
        log.Fatal(err)
    }
    if _, err = conn.Do("SET", "k5", "2"); err != nil {
        log.Fatal(err)
    }

    // get the keys, but ask redigo to give us a []interface{}
    // (it doesn't have a redis.Ints helper).
    vals, err := redis.Values(conn.Do("MGET", "k4", "k5", "k6"))
    if err != nil {
        log.Fatal(err)
    }

    // scan the []interface{} slice into a []int slice
    var ints []int
    if err = redis.ScanSlice(vals, &ints); err != nil {
        log.Fatal(err)
    }

    // prints [1 2 0]
    fmt.Println(ints)
}

更新2015年3月10日:redigo现在有一个redis.Ints助手。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26342790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档