How to query Redis db from golang using redigo library

I am trying to figure out what is the best way to query Redis db for multiple keys in one command. I have seen MGET that can be used for redis-cli. But how do you do it using the redigo library from GOlang code. Imagine that I have an array of keys, and I want to get all the values ​​for these keys from Redis db in one request.

Thanks in advance!

+4
source share
2 answers

Assuming it cis a Redigo join, and keysis [] a string of your keys:

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)
}

The Go FAQ , . , .

+7

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

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 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)
}

10 2015 .: redigo redis.Ints.

+4

All Articles