go语言使用redis —— redigo
redis的client有好多好多,go语言的client在redis官方有两个推荐,radix和redigo。选择哪一个好呢?确实很纠结,后来掷硬币决定选择redigo了。
redis、go、redigo的安装就不需要提了,不能强行增加篇幅。
redigo使用起来很人性化,api设计的符合直觉,我对redis了解较少,使用过程中基本没有遇到障碍。
redigo的使用入门可以去查godoc:http://godoc.org/github.com/garyburd/redigo/redis
接下来就是毫无技术含量的贴代码了:
连接redis我一般是这样写的:
1 c, err := redis.Dial("tcp", "127.0.0.1:6379") 2 if err != nil { 3 fmt.Println(err) 4 return 5 } 6 defer c.Close()
执行命令使用Do函数,跟在redis-cli敲命令的感觉差不多的:
1 v, err := c.Do("SET", "name", "red") 2 if err != nil { 3 fmt.Println(err) 4 return 5 } 6 fmt.Println(v) 7 v, err = redis.String(c.Do("GET", "name")) 8 if err != nil { 9 fmt.Println(err) 10 return 11 } 12 fmt.Println(v)
列表也是一样:
1 c.Do("lpush", "redlist", "qqq") 2 c.Do("lpush", "redlist", "www") 3 c.Do("lpush", "redlist", "eee")
读取列表可以for循环遍历,也可以使用redis.Scan函数:
1 values, _ := redis.Values(c.Do("lrange", "redlist", "0", "100")) 2 3 for _, v := range values { 4 fmt.Println(string(v.([]byte))) 5 } 6 7 // 或者 8 var v1 string 9 redis.Scan(values, &v1) 10 fmt.Println(v1)
管道:
1 c.Send("SET", "name", "red") 2 c.Send("GET", "name") 3 c.Flush() 4 c.Receive() 5 c.Receive()
发布订阅:
1 func subscribe() { 2 c, err := redis.Dial("tcp", "127.0.0.1:6379") 3 if err != nil { 4 fmt.Println(err) 5 return 6 } 7 defer c.Close() 8 9 psc := redis.PubSubConn{c} 10 psc.Subscribe("redChatRoom") 11 for { 12 switch v := psc.Receive().(type) { 13 case redis.Message: 14 fmt.Printf("%s: message: %s\n", v.Channel, v.Data) 15 case redis.Subscription: 16 fmt.Printf("%s: %s %d\n", v.Channel, v.Kind, v.Count) 17 case error: 18 fmt.Println(v) 19 return 20 } 21 } 22 }
1 go subscribe() 2 go subscribe() 3 go subscribe() 4 go subscribe() 5 go subscribe() 6 7 c, err := redis.Dial("tcp", "127.0.0.1:6379") 8 if err != nil { 9 fmt.Println(err) 10 return 11 } 12 defer c.Close() 13 14 for { 15 var s string 16 fmt.Scanln(&s) 17 _, err := c.Do("PUBLISH", "redChatRoom", s) 18 if err != nil { 19 fmt.Println("pub err: ", err) 20 return 21 } 22 }
差不多就是这样了,确实也没什么可以解释的。。。