1
0
mirror of https://github.com/redis/go-redis.git synced 2025-08-01 16:06:54 +03:00

fix: limit the number of connections created (#2441)

* fix: limit the number of connections created

Signed-off-by: monkey92t <golang@88.com>
This commit is contained in:
Monkey
2023-02-14 18:01:53 +08:00
committed by GitHub
parent 0d306237c7
commit 3532f2a414
2 changed files with 45 additions and 11 deletions

View File

@ -112,18 +112,25 @@ func (p *ConnPool) checkMinIdleConns() {
return
}
for p.poolSize < p.cfg.PoolSize && p.idleConnsLen < p.cfg.MinIdleConns {
p.poolSize++
p.idleConnsLen++
select {
case p.queue <- struct{}{}:
p.poolSize++
p.idleConnsLen++
go func() {
err := p.addIdleConn()
if err != nil && err != ErrClosed {
p.connsMu.Lock()
p.poolSize--
p.idleConnsLen--
p.connsMu.Unlock()
}
}()
go func() {
err := p.addIdleConn()
if err != nil && err != ErrClosed {
p.connsMu.Lock()
p.poolSize--
p.idleConnsLen--
p.connsMu.Unlock()
}
p.freeTurn()
}()
default:
return
}
}
}
@ -401,6 +408,7 @@ func (p *ConnPool) removeConn(cn *Conn) {
break
}
}
atomic.AddUint32(&p.stats.StaleConns, 1)
}
func (p *ConnPool) closeConn(cn *Conn) error {