前言
- 1.使用外部成熟的框架或者相对底层的库,在构架或者抽象一层,来方便我们使用。
- 2.我们这里使用:github.com/go-redis/re…
- 3.go get github.com/go-redis/redis/v8 (我们使用go mod来管理项目)
代码实现
- index.go
- 1.这里把初始数据包装了一下,并且使用的单例,只能创建一次。
- 2.sync.Onc是 Golang package 中使方法只执行一次的对象实现,作用与 init 函数类似。但也有所不同。
- 3.init 函数是在文件包首次被加载的时候执行,且只执行一次
- 4.sync.Onc 是在代码运行中需要的时候执行,且只执行一次
- 5.当一个函数不希望程序在一开始的时候就被执行的时候,我们可以使用 sync.Once 。
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
"log"
"sync"
"time"
)
var redisClient *redis.Client
var redisClient_Once sync.Once
func Redis() *redis.Client{
redisClient_Once.Do(func (){
redisClient= redis.NewClient(&redis.Options{
Network: "tcp",
Addr: "106.12.56.8:6379",
Password: "34681011cjscsyyy",
DB: 0,
PoolSize: 15,
MinIdleConns: 10,
DialTimeout: 5 * time.Second,
ReadTimeout: 3 * time.Second,
WriteTimeout: 3 * time.Second,
PoolTimeout: 4 * time.Second,
IdleCheckFrequency: 60 * time.Second,
IdleTimeout: 5 * time.Minute,
MaxConnAge: 0 * time.Second,
MaxRetries: 0,
MinRetryBackoff: 8 * time.Millisecond,
MaxRetryBackoff: 512 * time.Millisecond,
})
pong, err :=redisClient.Ping(context.Background()).Result()
if err != nil {
log.Fatal(fmt.Errorf("connect error:%s",err))
}
log.Println(pong)
})
return redisClient
}
import (
"context"
"go.mod/gedis"
"log"
)
func main() {
ctx:=context.Background()
ret:=gedis.Redis().Get(ctx,"name")
v,err := ret.Result()
if err !=nil {
log.Fatal(err)
}
log.Println(v)
}