go redis redigo

来源:互联网 发布:mac可以用bluestacks 编辑:程序博客网 时间:2024/06/04 18:07

redigo是redis官网推荐的go client之一。本文简单介绍其使用。

安装

go get github.com/garyburd/redigo/redis

Example

simple get

package mainimport (    "log"    "github.com/garyburd/redigo/redis")func main() {    server := "127.0.0.1:6379"    c, err := redis.Dial("tcp", server)    if err != nil {        log.Println("connect server failed:", err)        return    }    defer c.Close()    v, err2 := redis.String(c.Do("GET", "foo"))    if err2 != nil {        log.Println("GET failed:", err2)        return    }    log.Println("value:", v)}

output:

value: “bar”

set
set json格式的数据。

package mainimport (    "log"    "encoding/json"    "github.com/garyburd/redigo/redis")type DeviceItem struct {    Id        int    `json:"device_id"`    Type      int    `json:"device_type"`}func main() {    server := "127.0.0.1:6379"    c, err := redis.Dial("tcp", server)    if err != nil {        log.Println("connect server failed:", err)        return    }    defer c.Close()    device := DeviceItem{Id: 3002, Type: 2}    b, err2 := json.Marshal(device)    if err2 != nil {        log.Println("Unmarshal failed:", err2)        return    }       v, err3 := redis.String(c.Do("SET", "10.8.158.119", string(b)))    if err3 != nil {        log.Println("GET failed:", err3)        return    }    log.Println("value:", v)}

output:

2017/12/15 15:01:28 value: OK

pool
redis pool的使用。

package mainimport (    "encoding/json"    "log"    "time"    "github.com/garyburd/redigo/redis")type Host struct {    IP string    Name string}var RedisConnPool *redis.Poolconst redisServer = "127.0.0.1:6379"func main() {    // redis pool    InitRedisConnPool()    go reader("Num1")    go reader("Num2")    select {    }    // at last     RedisConnPool.Close()}func InitRedisConnPool() {    RedisConnPool = &redis.Pool{        MaxIdle:  1,        IdleTimeout: 240 * time.Second,        Dial: func() (redis.Conn, error) {            c, err := redis.Dial("tcp", redisServer)            if err != nil {                return nil, err            }            return c, err        },        TestOnBorrow: PingRedis,    }}func PingRedis(c redis.Conn, t time.Time) error {    _, err := c.Do("ping")    if err != nil {        log.Println("[ERROR] ping redis fail", err)    }    return err}func reader(name string) {    log.Printf("reader %s start ...\n", name)    rc := RedisConnPool.Get()    defer rc.Close()    for {        v, err := redis.String(rc.Do("GET", "Host1001"))        if err != nil {            log.Printf("%s GET failed:%v\n", name, err)            time.Sleep(1*time.Second)            continue        }        log.Printf("%s value:%v\n", name, v)        h := Host{}        if err := json.Unmarshal([]byte(v), &h); err != nil {            log.Printf("%s Unmarshal failed:%v\n", name, err)            continue        }           log.Printf("%s host:%v\n", name, h)        time.Sleep(1*time.Second)    }}

参考

redis官网推荐的go client
https://redis.io/clients#go

redigo
https://github.com/garyburd/redigo

redigo example
https://www.zybuluo.com/NickYu/note/61130
https://studygolang.com/articles/4542
http://blog.csdn.net/stevefang/article/details/40474827

原创粉丝点击