golang|golang-对redis进行压力测试

golang-对redis进行压力测试 用golang来检测redis的qps。
直接上代码吧!

package mainimport ( "fmt" "github.com/garyburd/redigo/redis" "sync" "time" )var( Poolredis.Pool//连接池 oSynWait sync.WaitGroup//互斥锁 )const ( OnMaxRun= 10000 //单线程执行命令数 AllMaxRun = 50//并发数 TimeFormat= "2006-01-02 15:04:05.999" //打印时间 Type = "set"//指令类型 )func main() { fmt.Println("--------------------------redis压力测试--------------------------") GetPool(&Pool) OldTime := time.Now() fmt.Println("开始",OldTime.Format(TimeFormat)) oSynWait.Add(AllMaxRun) for i := 0; i < AllMaxRun; i ++ { go ReadWriteInfo() } oSynWait.Wait() EndTime := time.Now() fmt.Println("结束",EndTime.Format(TimeFormat)) fmt.Printf("并发数: %d ; 总数据量:%d ; 耗时: %.2fs ; \n类型:%s ; key:1; value:1; \nqps:%.0f\n", AllMaxRun,AllMaxRun*OnMaxRun,EndTime.Sub(OldTime).Seconds(),Type,AllMaxRun*OnMaxRun/time.Now().Sub(OldTime).Seconds()) fmt.Println("-----------------------------测试结束-----------------------------") }//取得一个连接池 func GetPool(this *redis.Pool) { this.MaxActive = 10 this.MaxIdle = 10 this.Wait = true this.IdleTimeout = 100*time.Second this.Dial = func() (conn redis.Conn, err error) { conn,err = redis.Dial("tcp","127.0.0.1:6379") if err != nil{ fmt.Println("连接失败:",err) } return } }//存放数据 func ReadWriteInfo() { defer oSynWait.Done() for i := 0; i

结果
和redis自带的测试结果差不多哈。
golang|golang-对redis进行压力测试
文章图片

注意
【golang|golang-对redis进行压力测试】1.请确保电脑性能能跟的上,在只有单核,2G内存的虚拟机上协程没能完全跑起来,数值很低。
2.并发设置:大概30-50就合适了,多了获得的结果也差不多。

    推荐阅读