搜索

首页  >  问答  >  正文

linux - redis连接池应用在一万并发下时连接数只有2?

如图所示,我用golang的redigo库写了一个redis连接池,用ab测试模拟一万并发读操作,但是redis无论怎么刷新info,连接数一直是2,最多也只显示了4,但是使用写操作有六十多的连接数,同时netstat-ano显示确实有大量TIME_WAIT状态的TCP连接发生在远程127.0.0.1:6379上,请问这是什么原因?(redis配置里面最大连接数为10000)

(请无视右边的netstat窗口,那只是我截图的时候没截好,其实我自己find过滤了一下确实有大量TIME_WAIT状态的TCP连接发生在远程127.0.0.1:6379上)

PS:另外还有一个问题就是ab测试程序的-c参数为什么最大只能一万啊,我输入十万直接显示了帮助文档。。。

仅有的幸福仅有的幸福2778 天前1012

全部回复(1)我来回复

  • 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)
    }
    

    回复
    0
  • 取消回复