go 协程 mysql_go 多个 goroutine 操作 mysql 出现数据混乱

6

2019-08-17 14:36:52 +08:00

具体程序

```go

func init() {

_ = orm.RegisterDataBase("default", "mysql",

fmt.Sprintf("%s:%[email protected](%s:%v)/%s?charset=utf8&allowNativePasswords=true",

CommonConf.MysqlUserName, CommonConf.MysqlPassWord, CommonConf.MysqlIP, CommonConf.MysqlPort, CommonConf.MysqlDefaultDatabase))

//注册模型

orm.RegisterModel(new(AdminUsers),new(Realtrade))

//自动创建表 参数二为是否 drop 然后创建表 参数三是否打印创建表过程

orm.RunSyncdb("default",false,true)

}

var hpOrm orm.Ormer

func getOrm() orm.Ormer {

if hpOrm == nil {

hpOrm = orm.NewOrm()

}

return hpOrm

}

func UpdateByCond(table string,cond,updateMap map[string]interface{}) {

o := getOrm()

qs := o.QueryTable(table)

for key,value := range cond {

qs = qs.Filter(key,value)

}

qs.Update(orm.Params(updateMap))

}

func GetOneRecord(table string,cond map[string]interface{},resultStruct interface{}) {

o := getOrm()

qs := o.QueryTable(table)

for key,value := range cond {

qs = qs.Filter(key,value)

}

qs.One(resultStruct)

}

func GetAllRecord(table string,cond map[string]interface{},resultStruct interface{}) {

o := getOrm()

qs := o.QueryTable(table)

for key,value := range cond {

qs = qs.Filter(key,value)

}

qs.All(resultStruct)

}

```

然后有个进程 A 每隔 1s 会去查库 查到了所需的 B 类型数据 有多少条就起多少个协程去用 UpdateByCond 和 GetOneRecord GetAllRecord 这些读取和更新操作。 模拟多个客户端我起了 200 个进程 这 200 个进程会在一分钟内每秒插入一条不同的 B 类型数据。所以 A 会每秒起 200 个 goroutine 去更新和读取操作。。。 比较挫。。用的是一个单利对象还没去看 beego orm 源码。。。 重复写和少写没更新都有。 别说 200 个进程了 10 个进程都会有出错。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值