go实现Redis脚手架-创建对象(1)

802 阅读2分钟

前言

  • 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,              // redis数据库

			//连接池容量及闲置连接数量
			PoolSize:     15, // 连接池数量
			MinIdleConns: 10, //好比最小连接数
			//超时
			DialTimeout:  5 * time.Second, //连接建立超时时间
			ReadTimeout:  3 * time.Second, //读超时,默认3秒, -1表示取消读超时
			WriteTimeout: 3 * time.Second, //写超时,默认等于读超时
			PoolTimeout:  4 * time.Second, //当所有连接都处在繁忙状态时,客户端等待可用连接的最大等待时长,默认为读超时+1秒。

			//闲置连接检查包括IdleTimeout,MaxConnAge
			IdleCheckFrequency: 60 * time.Second, //闲置连接检查的周期,默认为1分钟,-1表示不做周期性检查,只在客户端获取连接时对闲置连接进行处理。
			IdleTimeout:        5 * time.Minute,  //闲置超时
			MaxConnAge:         0 * time.Second,  //连接存活时长,从创建开始计时,超过指定时长则关闭连接,默认为0,即不关闭存活时长较长的连接

			//命令执行失败时的重试策略
			MaxRetries:      0,                      // 命令执行失败时,最多重试多少次,默认为0即不重试
			MinRetryBackoff: 8 * time.Millisecond,   //每次计算重试间隔时间的下限,默认8毫秒,-1表示取消间隔
			MaxRetryBackoff: 512 * time.Millisecond, //每次计算重试间隔时间的上限,默认512毫秒,-1表示取消间隔

		})
		pong, err :=redisClient.Ping(context.Background()).Result()
		if err != nil {
			log.Fatal(fmt.Errorf("connect error:%s",err))
		}
		log.Println(pong)
	})
	return redisClient
}
  • main.go
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)
}