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 }

 

posted @ 2020-07-23 16:43  红领巾下的大刀疤  阅读(88)  评论(0)    收藏  举报
/* 看板娘 */