1. 程式人生 > 實用技巧 >go 使用go-redis 和redigo 連線redis

go 使用go-redis 和redigo 連線redis

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 4998
Password: "", // 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 } }