golang redigo 在高并发下的问题。连接池占满CPU

在使用redigo(github.com/garyburd/redigo/redis)进行Redis操作时,发现在高并发场景下,由于未正确归还连接池中的连接,导致压测过程中性能瓶颈,CPU占用率较高。解决方法是确保每次执行完Redis命令后,及时将连接返回到连接池。
摘要由CSDN通过智能技术生成

最初我们使用了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
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值