go 使用go-redis 和redigo 連線redis
阿新 • • 發佈:2020-11-24
package main import ( "context" "fmt" "net/http" "sync" "time" goredis "github.com/garyburd/redigo/redis" redis "github.com/go-redis/redis/v8" ) var ctx = context.Background() var redisdb *redis.Client var once sync.Once var pool *goredis.Pool func init() { pool = &goredis.Pool{ MaxIdle:80, //最大空閒 MaxActive: 80, //0表示沒有限制 ,最大連線數 Wait: true, IdleTimeout: 300, Dial: func() (goredis.Conn, error) { return goredis.Dial("tcp", "192.168.3.10:6000") }, } redisdb = GetInstance(redis.Options{ Addr: "192.168.3.10:6000", //叢集模式一定要配置主節點的值 否則會報MOVED 4998Password: "", // no password set DB: 0, // use default DB }) } //使用單例模式建立redis client func GetInstance(opt redis.Options) *redis.Client { once.Do(func() { redisdb = redis.NewClient(&opt) }) return redisdb } //使用redins-go迴圈查詢1000次數func sayHello(w http.ResponseWriter, r *http.Request) { nowtime := time.Now().UnixNano() defer elapsed(w, nowtime) fmt.Fprintln(w, "Hello") err := redisdb.Set(ctx, "key1", "value", 0).Err() if err != nil { panic(err) } //迴圈使用redis 讀取資料 val, err := redisdb.Get(ctx, "key").Result() if err != nil { panic(err) } fmt.Println("key", val) } //使用goredis迴圈查詢1000次數 func sayHello2(w http.ResponseWriter, r *http.Request) { nowtime := time.Now().UnixNano() defer elapsed(w, nowtime) fmt.Fprintln(w, "Hello2") //迴圈使用redis 讀取資料 conn, err := goredis.Dial("tcp", "192.168.3.10:6000") if err != nil { fmt.Println("connect redis error :", err) return } // conn := pool.Get() defer conn.Close() _, err = conn.Do("SET", "name", "wd") if err != nil { fmt.Println("redis set error:", err) } name, err := goredis.String(conn.Do("GET", "name")) if err != nil { fmt.Println("redis get error:", err) } else { fmt.Printf("Got name: %s \n", name) } fmt.Println("key", name) } // 使用defer 關鍵字統計程式耗時時長 func elapsed(w http.ResponseWriter, beforeTime int64) { t := time.Now().UnixNano() - beforeTime fmt.Fprintln(w, t) } func main() { http.HandleFunc("/sayHello", sayHello) http.HandleFunc("/sayHello2", sayHello2) err := http.ListenAndServe(":9090", nil) if err != nil { fmt.Printf("http server failed, err:%v\n", err) return } }