golang-对redis进行压力测试
发布时间:2023-03-15 编辑:jiaochengji.com
教程集为您提供golang-对redis进行压力测试等资源,欢迎您收藏本站,我们将为您提供最新的golang-对redis进行压力测试资源
golang-对redis进行压力测试
用golang来检测redis的qps。
直接上代码吧!
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
"sync"
"time"
)
var(
Pool redis.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 <OnMaxRun; i {
conn := Pool.Get()
//存
_, err := conn.Do(Type, "1", "1")
if err != nil {
fmt.Println("存放数据失败", err)
return
}
//取
//_, err = conn.Do("get", "1")
//if err != nil {
// fmt.Println("取出数据失败", err)
// return
//}
//关
err = conn.Close()
if err!= nil{
fmt.Println("关闭连接失败 ",err)
return
}
}
}
结果
和redis自带的测试结果差不多哈。
注意
1.请确保电脑性能能跟的上,在只有单核,2G内存的虚拟机上协程没能完全跑起来,数值很低。
2.并发设置:大概30-50就合适了,多了获得的结果也差不多。
您可能感兴趣的文章:
REDIS基础, GO语言
PHP操作Redis数据库常用方法(总结)
PHP操作Redis数据库常用方法
redis基础问答
超全的!Redis的安装和基础操作
Redis安装配置教程
PHP-redis中文帮助文档
配置 redis 主从复制一例
Laravel 5.1框架Redis 的安装配置及基本使用教程
redis安装实例
上一篇:golang--sort比较大小
下一篇:Go 类型转换与别名
[关闭]