package common import ( "app.yhyue.com/moapp/MessageCenter/entity" "github.com/go-xorm/xorm" "log" "time" ) var ( SP = make(chan bool, 5) SaveCache = make(chan map[string]interface{}, 100000) ) // SaveMessageClockLog 保存消息点击记录 func SaveMessageClockLog(saveData []map[string]interface{}) { orm := entity.Engine.NewSession() defer func(orm *xorm.Session) { orm.Close() }(orm) err := orm.Begin() if err != nil { log.Println("保存消息事务开启失败", err) return } _, err = orm.Table("message_open_log").Insert(saveData) if err != nil { err2 := orm.Rollback() if err2 != nil { log.Println("存储消息rollback失败", err2) return } log.Println("存储消息打开日志失败", err) } err = orm.Commit() if err != nil { log.Println("存储消息commit失败", err) return } } func SaveTask() { log.Println("message log Save...") arru := make([]map[string]interface{}, 500) indexu := 0 for { select { case v := <-SaveCache: arru[indexu] = v indexu++ if indexu == 500 { SP <- true go func(arru []map[string]interface{}) { defer func() { <-SP }() SaveMessageClockLog(arru) }(arru) arru = make([]map[string]interface{}, 500) indexu = 0 } case <-time.After(1000 * time.Millisecond): if indexu > 0 { SP <- true go func(arru []map[string]interface{}) { defer func() { <-SP }() SaveMessageClockLog(arru) }(arru[:indexu]) arru = make([]map[string]interface{}, 500) indexu = 0 } } } }