使用Pool结构建立连接池
初始化连接池
pool := &redis.pool{
MaxIdle: 16,
MaxActive: 1024,
IdleTimeout: 300,
Dial: func() (redis.Conn,error) {
return redis.Dial("tcp","localhost:6379")
},
}
- MaxIdle:最大的空闲连接数,表示即使redis没有被使用时,依然可以保持16个空闲的连接,随时处于待命状态。
- MaxActive: 最大的激活链接数,表示同时最多有1024个连接。
- IdleTimeout: 最大的空闲连接等待时间,超过这个时间空闲连接将被关闭。
调用Do方法老设置和获取字符串
func main() {
c := pool.Get()
defer c.Close()
_,err := c.Do("Set","username","jack")
if err != nil {
fmt.Println("Set Failed,err:",err)
return
}
r,err := redis.String(c.Do("Get","username"))
if err != nil {
fmt.Println("Get failed",err)
return
}
fmt.Println(r)
}
Redis实现管道操作
Send(),Flansh(),Receive()方法支持管道化操作。Send()方法用于向连接的输出缓冲中写入命令。Flash()方法用于将连接的输出缓冲清空并写入服务器端。Receive()方法用于按照FIFO顺序依次读取服务端的响应。
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
func main() {
c,err := redis.Dial("tcp","localhost:6379")
if err != nil {
fmt.Println("conn failed,err: ",err)
return
}
defer c.Close()
c.Send("SET","username1","tom")
c.Send("SET","username2","李某人")
c.Flush()
v,err := c.Receive()
fmt.Printf("v:%v,err:%v\n",v,err)
v,err = c.Receive()
fmt.Printf("v:%v,err:%v\n",v,err)
v,err = c.Receive() //一直等待
fmt.Printf("v:%v,err:%v\n",v,err)
}