最初我们使用了redigo【github.com/garyburd/redigo/redis】,使用上倒是没有什么不爽的,但是在压测的时候发现一个问题,即连接池的使用。
func factory(name string) *redis.Pool { conf := config.Get("redis." + name).(*toml.TomlTree) host := conf.Get("host").(string) port := conf.Get("port").(string) password := conf.GetDefault("passwd", "").(string) fmt.Printf("conf-redis: %s:%s - %s\r\n", host, port, password) pool := &redis.Pool{ IdleTimeout: idleTimeout, MaxIdle: maxIdle, MaxActive: maxActive, Dial: func() (redis.Conn, error) { address := fmt.Sprintf("%s:%s", host, port) c, err := redis.Dial("tcp", address, redis.DialPassword(password), ) if err != nil { exception.Catch(err) return nil, err } return c, nil }, } return pool } /** * 获取连接 */ func getRedis(name string) redis.Conn { return redisPool[name].Get() } /** * 获取master连接 */ func Master(db int) RedisClient { client := RedisClient{"master", db} return client } /** * 获取slave连接 */ func Slave(db int) RedisClient { client := RedisClient{"slave", db} return client }