Example #1
0
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
		},
	}
}