go语言使用redis —— redigo

来源:互联网 发布:mac玩qq堂 编辑:程序博客网 时间:2024/05/16 03:52

go语言使用redis —— redigo

wolfred7464 · 2015-07-24 03:00:00 · 16602 次点击 · 预计阅读时间 2 分钟 ·2分钟之前 开始浏览    
这是一个创建于 2015-07-24 03:00:00 的文章,其中的信息可能已经有所发展或是发生改变。

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     return5 }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     return11 }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             return20         }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     return11 }12 defer c.Close()13 14 for {15     var s string16     fmt.Scanln(&s)17     _, err := c.Do("PUBLISH", "redChatRoom", s)18     if err != nil {19         fmt.Println("pub err: ", err)20         return21     }22 }

差不多就是这样了,确实也没什么可以解释的。。。