#如圖所示,我用golang的redigo函式庫(kù)寫(xiě)了一個(gè)redis連線(xiàn)池,用ab測(cè)試模擬一萬(wàn)並發(fā)讀操作,但是redis無(wú)論怎麼刷新info,連線(xiàn)數(shù)一直是2,最多也只顯示了4,但是使用寫(xiě)入操作有六十多的連線(xiàn)數(shù),同時(shí)netstat-ano顯示確實(shí)有大量TIME_WAIT狀態(tài)的TCP連線(xiàn)發(fā)生在遠(yuǎn)端127.0.0.1:6379上,請(qǐng)問(wèn)這是什麼原因? (redis配置裡面最大連線(xiàn)數(shù)為10000)
(請(qǐng)無(wú)視右邊的netstat窗口,那隻是我截圖的時(shí)候沒(méi)截好,其實(shí)我自己find過(guò)濾了一下確實(shí)有大量TIME_WAIT狀態(tài)的TCP連接發(fā)生在遠(yuǎn)程127.0.0.1:6379上)
PS:另外還有一個(gè)問(wèn)題就是ab測(cè)試程式的-c參數(shù)為什麼最大隻能一萬(wàn)啊,我輸入十萬(wàn)直接顯示了幫助文件。 。 。
嫌連線(xiàn)池沒(méi)被佔(zhàn)用?
這樣寫(xiě)
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)
}