首页 > 其他 > 详细

go 使用go-redis 和redigo 连接redis

时间:2020-11-24 20:22:51      阅读:489      评论:0      收藏:0      [点我收藏+]
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
    }
}

 

go 使用go-redis 和redigo 连接redis

原文:https://www.cnblogs.com/chongyao/p/14031939.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!