请教一个优化问题

时光
  • 109

连接远程在处理消息队列时反应特别缓慢,30多条数据达到了29秒,请大佬帮我瞅一眼看看,我眼瞎了

func AddTaskVideoList(c *gin.Context) {
    app := application.Gin{C: c}
    id := c.Request.FormValue("id")
    data := models.GetPendingVideo(id)
    for _, value := range data{
        redis.RightPushToList("video_encode", value)
        models.UpdateTaskStatus(value.ID,1)
    }
    app.Response(http.StatusOK, http.StatusOK, data)
    return
}
func GetPendingVideo(id string) (Task []Task) {
    if id != "" {
        db.Where("status = ? and task_rule_number=?", 0, id).Find(&Task)
    } else {
        db.Where("status = ?", 0).Find(&Task)
    }
    return
}
func RightPushToList(key string, data interface{}) error {
    conn := RedisConn.Get()
    defer conn.Close()
    mjson, _ := json.Marshal(data)
    mString := string(mjson)
    fmt.Printf("print mString:%s", mString)
    _, err := redis.Strings(conn.Do("RPUSH", key, data))
    fmt.Println(data)

    return err
}
func UpdateTaskStatus(id int, state int) error {
    if err := db.Model(&Task{}).Where("`id` = ?", id).Update("status", state).Error; err != nil {
        return err
    }
    return nil
}
回复
阅读 701
2 个回答

个人建议你可以先看看是GetPendingVideo/RightPushToList/UpdateTaskStatus中哪个耗时比较多。看代码感觉是GetPendingVideo,然后你看看是不是id==""的时候耗时比较多,进而定位是不是status没加索引?

提供下task 的表结构。说一下task 的数据量。来帮你分析一下。纯看代码逻辑,纯属瞎猜。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏