package myRedis import ( "context" "fmt" "github.com/redis/go-redis/v9" "log" "sync" ) type SimpleRedis struct { Host string Password string hosts map[int]*Hosts } type Hosts struct { clientOnce sync.Once client *redis.Client } func NewSimpleRedis(host string, password string) *SimpleRedis { return &SimpleRedis{Host: host, Password: password, hosts: map[int]*Hosts{}} } func (t *SimpleRedis) connectRedis(index int) *redis.Client { if t.hosts[index] == nil { t.hosts[index] = &Hosts{ clientOnce: sync.Once{}, client: nil, } } t.hosts[index].clientOnce.Do(func() { redisClient := redis.NewClient(&redis.Options{ Addr: t.Host, Password: t.Password, // no password set DB: index, // use default DB //连接池容量以闲置链接数量 PoolSize: 15, MinIdleConns: 10, }) pong, err := redisClient.Ping(context.Background()).Result() if err != nil { panic(fmt.Errorf("connect error:%s", err)) } log.Println(fmt.Sprintf("redis newClient success, index:%d, pong: %s", index, pong)) t.hosts[index].client = redisClient }) return t.hosts[index].client } func (t *SimpleRedis) ConnectDefaultRedis() *Client { return t.GetRedisClient(0) } func (t *SimpleRedis) GetRedisClient(index int) *Client { return NewClient(t.connectRedis(index)) }