Go redis 操作
连接
import "github.com/garyburd/redigo/redis"
func main() {
c, err := redis.Dial("tcp", "localhost:6379")
if err != nil {
fmt.Println("conn redis failed, err:", err)
return
}
defer c.Close()
}
1 // package main 2 3 // import ( 4 // "github.com/garyburd/redigo/redis" 5 // "fmt" 6 // ) 7 8 // // // 检测异常并且 加个追踪 9 // func checkErr(err error) { 10 // if err != nil { 11 // fmt.Println(err) 12 // // panic(err) 抛出异常 13 // } 14 // } 15 16 // func main(){ 17 // // 建立连接 18 19 // c, err := redis.Dial("tcp", "127.0.0.1:6379") 20 // checkErr(err) 21 22 //set get 23 24 // _, err = c.Do("Set", "name", "Wangbaoqiang") 25 // checkErr(err) 26 27 // name , err := redis.String(c.Do("Get", "name")) 28 // checkErr(err) 29 // fmt.Println(name) 30 31 // mset & mget 32 // 批量设置 33 34 // _, err = c.Do("MSet", "name", "zhangfei", "age", 18) 35 // checkErr(err) 36 // defer c.Close() 37 // res , err := redis.Strings(c.Do("MGet", "name", "age")) 38 // checkErr(err) 39 // fmt.Println(res) 40 41 // hset & hget 42 // _, err = c.Do("Hset", "names", "product", "bee") 43 // checkErr(err) 44 45 // r, err := redis.String(c.Do("HGet", "names", "product")) 46 // checkErr(err) 47 // fmt.Println(r) 48 49 // 设置过期时间 50 // _, err = c.Do("expire", "name", 30) 51 // checkErr(err) 52 53 // lpush & lpop & llen 54 // _, err = c.Do("lpush", "Queue", "p", "b", 8) 55 // checkErr(err) 56 57 // for { 58 // r, err := redis.String(c.Do("lpop","Queue")) 59 // if err !=nil { 60 // fmt.Println("xxxx", err) 61 // break 62 // } 63 // fmt.Println(r) 64 // } 65 66 // r3, err := redis.Int(c.Do("llen", "Queue")) 67 // if err != nil { 68 // fmt.Println("llen error: ", err) 69 // return 70 // } 71 // fmt.Println(r3) 72 73 }
连接池
各参数的解释如下:
MaxIdle:最大的空闲连接数,表示即使没有redis连接时依然可以保持N个空闲的连接,而不被清除,随时处于待命状态。
MaxActive:最大的激活连接数,表示同时最多有N个连接
IdleTimeout:最大的空闲连接等待时间,超过此时间后,空闲连接将被关闭
pool := &redis.Pool{
MaxIdle: 16,
MaxActive: 1024,
IdleTimeout: 300,
Dial: func() (redis.Conn, error) {
return redis.Dial("tcp", "localhost:6379")
},
}
1 package main 2 3 import ( 4 "github.com/garyburd/redigo/redis" 5 "fmt" 6 ) 7 var pool *redis.Pool 8 // // 检测异常并且 加个追踪 9 func checkErr(err error) { 10 if err != nil { 11 fmt.Println(err) 12 // panic(err) 抛出异常 13 } 14 } 15 // MaxIdle:最大的空闲连接数,表示即使没有redis连接时依然可以保持N个空闲的连接,而不被清除,随时处于待命状态。 16 // MaxActive:最大的激活连接数,表示同时最多有N个连接 17 // IdleTimeout:最大的空闲连接等待时间,超过此时间后,空闲连接将被关闭 18 19 // func init() { 20 // pool =&redis.Pool{ 21 // MaxIdle: 10, 22 // MaxActive: 1024, 23 // IdleTimeout: 100, 24 // Dial: func() (redis.Conn, error){ 25 // return redis.Dial("tcp", "127.0.0.1:6379") 26 // }, 27 // } 28 // } 29 30 func main() { 31 // c := pool.Get() 32 // defer c.Close() 33 34 // _, err :=c.Do("Set", "xo", "30") 35 // checkErr(err) 36 37 // r, err := redis.String(c.Do("Get", "xo")) 38 // checkErr(err) 39 // fmt.Println(r) 40 41 // 管道 42 c, err := redis.Dial("tcp", "127.0.0.1:6379") 43 checkErr(err) 44 defer c.Close() 45 46 c.Send("SET", "name1", "sss1") 47 c.Send("SET", "name2", "sss2") 48 c.Flush() 49 50 v, err := c.Receive() 51 fmt.Printf("v:%v,err:%v\n", v, err) 52 53 v, err = c.Receive() 54 fmt.Printf("v:%v,err:%v\n", v, err) 55 56 v, err = c.Receive() // 夯住,一直等待 57 fmt.Printf("v:%v,err:%v\n", v, err) 58 59 }

浙公网安备 33010602011771号