quick start
1 2 3 4 5 6
| c, err := redis.Dial("tcp", "127.0.0.1:6379") if err != nil { fmt.Println(err) return } defer c.Close()
|
执行命令使用Do函数,跟在redis-cli敲命令的感觉差不多的:
1 2 3 4 5 6 7 8 9 10 11 12
| v, err := c.Do("SET", "name", "red") if err != nil { fmt.Println(err) return } fmt.Println(v) v, err = redis.String(c.Do("GET", "name")) if err != nil { fmt.Println(err) return } fmt.Println(v)
|
列表也是一样:
1 2 3
| c.Do("lpush", "redlist", "qqq") c.Do("lpush", "redlist", "www") c.Do("lpush", "redlist", "eee")
|
读取列表可以for循环遍历,也可以使用redis.Scan函数:
1 2 3 4 5 6
| values, _ := redis.Values(c.Do("lrange", "redlist", "", "")) for _, v := range values { fmt.Println(string(v.([]byte))) } var v1 string redis.Scan(values, &v1) fmt.Println(v1)
|
管道:
1 2 3 4 5
| c.Send("SET", "name", "red") c.Send("GET", "name") c.Flush() c.Receive() c.Receive()
|
发布订阅:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| func subscribe() { c, err := redis.Dial("tcp", "127.0.0.1:6379") if err != nil { fmt.Println(err) return } defer c.Close() psc := redis.PubSubConn{c} psc.Subscribe("redChatRoom") for { switch v := psc.Receive().(type) { case redis.Message: fmt.Printf("%s: message: %s\n", v.Channel, v.Data) case redis.Subscription: fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count) case error: fmt.Println(v) return } } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| func read() { go subscribe() go subscribe() go subscribe() go subscribe() go subscribe()
c, err := redis.Dial("tcp", "127.0.0.1:6379") if err != nil { fmt.Println(err) return } defer c.Close() for { var s string fmt.Scanln(&s) _, err := c.Do("PUBLISH", "redChatRoom", s) if err != nil { fmt.Println("pub err: ", err) return } } }
|