suchen

Heim  >  Fragen und Antworten  >  Hauptteil

linux - Wenn der Redis-Verbindungspool mit weniger als 10.000 Parallelität angewendet wird, beträgt die Anzahl der Verbindungen nur 2?

Wie im Bild gezeigt, habe ich mit der Redigo-Bibliothek von Golang einen Redis-Verbindungspool geschrieben und mithilfe von AB-Tests 10.000 gleichzeitige Lesevorgänge simuliert. Unabhängig davon, wie Redis die Informationen aktualisiert, beträgt die Anzahl der Verbindungen jedoch immer 2 und nur 4 Es werden jedoch höchstens mehr als 60 Verbindungen angezeigt, die Schreibvorgänge verwenden, und netstat-ano zeigt, dass es tatsächlich eine große Anzahl von TCP-Verbindungen im TIME_WAIT-Status auf der Fernbedienung 127.0.0.1:6379 gibt ? (Die maximale Anzahl von Verbindungen in der Redis-Konfiguration beträgt 10.000)

(Bitte ignorieren Sie das Netstat-Fenster auf der rechten Seite, es lag nur daran, dass ich den Screenshot nicht richtig gemacht habe. Tatsächlich habe ich ihn selbst gefunden und gefiltert und es gab tatsächlich eine große Anzahl von TCP-Verbindungen im Status TIME_WAIT auf der Fernbedienung 127.0.0.1:6379)

PS: Eine andere Frage ist, warum der maximale -c-Parameter des ab-Testprogramms nur 10.000 sein kann, um das Hilfedokument direkt anzuzeigen. . .

仅有的幸福仅有的幸福2751 Tage vor984

Antworte allen(1)Ich werde antworten

  • phpcn_u1582

    phpcn_u15822017-05-16 13:20:32

    嫌连接池没被占用?

    这样写

    package main
    
    import "github.com/garyburd/redigo/redis"
    import (
        "flag"
        "fmt"
        "time"
    )
    
    func newPool(addr string) *redis.Pool {
        return &redis.Pool{
            MaxIdle:     30,
            IdleTimeout: 240 * time.Second,
            Dial:        func() (redis.Conn, error) { return redis.Dial("tcp", addr) },
        }
    }
    
    var (
        pool        *redis.Pool
        redisServer = flag.String("redisServer", ":6379", "")
    )
    
    func main() {
        flag.Parse()
        pool = newPool(*redisServer)
        fmt.Println(pool)
        conn := pool.Get()
        conn2 := pool.Get()
        conn3 := pool.Get()
        conn4 := pool.Get()
        conn.Do("get", "a")
        conn2.Do("get", "a")
        conn3.Do("get", "a")
        conn4.Do("get", "a")
        //这里使劲加connX,就能看到效果了
        //defer conn.Close()
        //defer conn2.Close()
        //defer conn3.Close()
        //defer conn4.Close()
    
        time.Sleep(100 * time.Second)
    }
    

    Antwort
    0
  • StornierenAntwort