增加gdb和gredis包的benchmark测试脚本

This commit is contained in:
John
2018-04-28 11:47:43 +08:00
parent 9dc43e12b4
commit e6df1c7a58
5 changed files with 45 additions and 42 deletions

View File

@ -15,8 +15,6 @@ import (
"gitee.com/johng/gf/g/util/grand"
_ "github.com/lib/pq"
_ "github.com/go-sql-driver/mysql"
"sync"
"gitee.com/johng/gf/g/container/gmap"
)
const (
@ -103,9 +101,6 @@ var linkMysql = &dbmysql{}
// PostgreSQL接口对象
var linkPgsql = &dbpgsql{}
// 二级数据库连接池,这是一个临时的对象池,键名为对应的单节点数据库配置,键值为*sync.Pool
var dbPools = gmap.NewStringInterfaceMap()
// 使用默认/指定分组配置进行连接数据库集群配置项default
func New(groupName...string) (*Db, error) {
name := config.d
@ -186,10 +181,16 @@ func newDb (masterNode *ConfigNode, slaveNode *ConfigNode) (*Db, error) {
default:
return nil, errors.New(fmt.Sprintf("unsupported db type '%s'", masterNode.Type))
}
master := openDb(link, masterNode)
master, err := link.Open(masterNode)
if err != nil {
return nil, err
}
slave := master
if slaveNode != nil {
slave = openDb(link, slaveNode)
slave, err = link.Open(slaveNode)
if err != nil {
return nil, err
}
}
return &Db {
link : link,
@ -200,30 +201,6 @@ func newDb (masterNode *ConfigNode, slaveNode *ConfigNode) (*Db, error) {
}, nil
}
func openDb (link Link, node *ConfigNode) *sql.DB {
var pool *sync.Pool
poolKey := fmt.Sprintf("%v", *node)
if v := dbPools.Get(poolKey); v == nil {
pool := sync.Pool{
New : func() interface{} {
if db, err := link.Open(node); err != nil {
//glog.Error(err)
return nil
} else {
return db
}
},
}
dbPools.Set(poolKey, pool)
} else {
pool = v.(*sync.Pool)
}
if v := pool.Get(); v != nil {
return v.(*sql.DB)
}
return nil
}
// 将结果列表按照指定的字段值做map[string]Map
func (list List) ToStringMap(key string) map[string]Map {
m := make(map[string]Map)

View File

@ -20,16 +20,14 @@ import (
// 关闭链接
func (db *Db) Close() error {
if db.master != nil {
err := db.master.Close()
if err == nil {
if err := db.master.Close(); err == nil {
db.master = nil
} else {
return err
}
}
if db.slave != nil {
err := db.slave.Close()
if err == nil {
if err := db.slave.Close(); err == nil {
db.slave = nil
} else {
return err

View File

@ -0,0 +1,31 @@
// Copyright 2018 gf Author(https://gitee.com/johng/gf). All Rights Reserved.
//
// This Source Code Form is subject to the terms of the MIT License.
// If a copy of the MIT was not distributed with this file,
// You can obtain one at https://gitee.com/johng/gf.
// go test *.go -bench=".*"
package gredis_test
import (
"testing"
"gitee.com/johng/gf/g"
)
func init() {
// 这里需要修改为本地配置文件的目录地址
g.Config().SetPath("/home/john/Workspace/Go/GOPATH/src/gitee.com/johng/gf/geg/frame")
}
func Benchmark_New(b *testing.B) {
for i := 0; i < b.N; i++ {
g.Redis()
}
}
func Benchmark_NewAndClose(b *testing.B) {
for i := 0; i < b.N; i++ {
g.Redis().Close()
}
}

View File

@ -6,7 +6,7 @@ database:
- host: 127.0.0.1
port: 3306
user: root
pass: "8692651"
pass: "123456"
name: test
type: mysql
role: master
@ -15,7 +15,7 @@ database:
- host: 127.0.0.1
port: 3306
user: root
pass: "8692651"
pass: "123456"
name: test
type: mysql
role: master
@ -23,5 +23,5 @@ database:
priority: 1
# Redis数据库配置
redis:
disk: 127.0.0.1:6379,0
cache: 127.0.0.1:6379,2
default: 127.0.0.1:6379,0
cache : 127.0.0.1:6379,2

View File

@ -3,12 +3,9 @@ package main
import (
"fmt"
"math/rand"
"sync"
)
func main() {
p := &sync.Pool{}
p.Put()
for i := 0; i < 100; i++ {
fmt.Println(rand.Intn(200))
}