package redis import ( "epur-pay/model" "epur-pay/pkg/logger" "fmt" "github.com/gomodule/redigo/redis" "time" ) var RPool *redis.Pool func New(r *model.Redis) { RPool = newPool(r) } func newPool(r *model.Redis) *redis.Pool { return &redis.Pool{ MaxIdle: r.MaxIdle, MaxActive: r.MaxActive, Wait: true, IdleTimeout: r.IdleTimeout * time.Second, Dial: func() (redis.Conn, error) { return Dial(r) }, } } func Dial(r *model.Redis) (redis.Conn, error) { for { c, err := dial(r) if err != nil { logger.ErrorLogger.Errorln(err.Error()) } return c, nil } } func dial(r *model.Redis) (redis.Conn, error) { c, err := redis.Dial( "tcp", fmt.Sprintf("%s:%s", r.Host, r.Port), redis.DialDatabase(r.Name), redis.DialPassword(r.PassWord), redis.DialReadTimeout(time.Second*r.ReadTimeout), redis.DialWriteTimeout(time.Second*r.WriteTimeout), redis.DialConnectTimeout(time.Second*r.ConnectTimeout)) if err != nil { logger.ErrorLogger.Errorln("connect redis error!", err.Error()) return nil, err } _, err = redis.String(c.Do("PING")) if err != nil { logger.ErrorLogger.Errorln("connect redis error!", err.Error()) return nil, err } return c, err }