golang 客户端工具redigo学习

来源:互联网 发布:future java 编辑:程序博客网 时间:2024/06/16 09:20

参考:https://godoc.org/github.com/garyburd/redigo/redis

package main


import (
"fmt"
"github.com/garyburd/redigo/redis"
"log"
"os"
"time"
)


var logger *log.Logger


func init() {
file, err := os.Create("test.log")
if err != nil {
log.Fatal(err)
}
logger = log.New(file, "", log.LstdFlags|log.Llongfile)
}


const (
redis_host string = "192.168.100.151:6379"
)


func main() {
// 初始化链接池
pool := &redis.Pool{
MaxIdle:   80,
MaxActive: 12000, // max number of connections
Dial: func() (redis.Conn, error) {
c, err := redis.Dial("tcp", redis_host)
if err != nil {
panic(err.Error())
}
return c, err
},
IdleTimeout: time.Second * 1,
}
// redis.DialTimeout("tcp", redis_host, 0, 1*time.Second, 1*time.Second)
conn := pool.Get()
defer conn.Close()


//命令执行
_, err := conn.Do("SET", "user:user0", 123)
if err != nil {
logger.Println(err)
}
user0, err := redis.Int(conn.Do("GET", "user:user0"))
fmt.Println(user0)


//管道操作
conn.Send("SET", "foo", "bar")
conn.Send("GET", "foo")
conn.Flush()
conn.Receive()
v, err := redis.String(conn.Receive())
if err != nil {
logger.Fatal(err)
}
fmt.Println(v)


// send,flush,receive实现发布订阅
conn.Send("SUBSCRIBE", "example")
conn.Flush()
// conn.Receive()
for {
// reply, err := conn.Receive()
// if err != nil {
// logger.Fatal(err)
// }
reply, _ := redis.Values(conn.Receive())
fmt.Println(reply)
}


//PubSubConn
// psc := redis.PubSubConn{conn}
// psc.Subscribe("example")
// // go conn.Do("publish", "example", "hellowrld")
// 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)
// }
// }
}

0 0