func createRedisPool(c *gof.Config) *redis.Pool { redisHost := c.GetString("redis_host") redisDb := c.GetString("redis_db") redisPort := c.GetInt("redis_port") if redisPort <= 0 { redisPort = 6379 } redisMaxIdle := c.GetInt("redis_maxIdle") if redisMaxIdle <= 0 { redisMaxIdle = 10000 } redisIdleTimeout := c.GetInt("redis_idleTimeout") if redisIdleTimeout <= 0 { redisIdleTimeout = 20000 } return &redis.Pool{ MaxIdle: redisMaxIdle, IdleTimeout: time.Duration(redisIdleTimeout) * time.Second, Dial: func() (redis.Conn, error) { dial: c, err := redis.Dial("tcp", fmt.Sprintf("%s:%d", redisHost, redisPort)) if err != nil { for { log.Printf("FATAL: redis(%s:%d) initialize failed - %s , Redial after 5 seconds\n", redisHost, redisPort, err.Error()) time.Sleep(time.Second * 5) goto dial } } if _, err := c.Do("select", redisDb); err != nil { c.Close() log.Fatalf("FATAL: redis(%s:%d) initialize failed - %s", redisHost, redisPort, err.Error()) } return c, err }, TestOnBorrow: func(c redis.Conn, t time.Time) error { _, err := c.Do("PING") return err }, } }