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 }
差不多就是這樣了,確實也沒什么可以解釋的。。。