请教一个优化问题

连接远程在处理消息队列时反应特别缓慢,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
}
阅读 259
评论
    2 个回答
    darjun
    • 2.1k

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

    评论 赞赏

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

      评论 赞赏
        撰写回答

        登录后参与交流、获取后续更新提醒