• go的定时任务工具


    go定时任务三方包,这个直接拉的版本和文档里的版本是不一样的,要去github看文档,每个版本的使用方法是不一样的,我们这里使用下面的命令去拉取3.0.0版本的查看

    go get github.com/robfig/cron/v3@v3.0.0

    package Jobs
    
    import (
       "encoding/json"
       "log"
       "sz1/AppInit"
       "sz1/Models"
       "time"
    )
    
    //排行榜定时任务,这里是优化mysql的场景,一张查询很耗时又需要经常查询的表,我通过一个定时任务每6秒去查询一下真实数据更新到缓存表中,然后用户真正查看的数据是缓存表,这样速度就很快了
    
    func init() {
       _, err := MyCron.AddFunc("0/6 * * * * *", func() { //每隔6秒触发
          prods := &Models.BookList{}
          sql := `select book_id,book_name,book_kind from (
    select  book_id,book_name, meta_value,book_kind,IF(@pre=book_kind,@rownum:=@rownum+1,@rownum:=1) as rownum,@pre:=book_kind
    from (select book_kind,b.book_id,book_name,a.meta_value from book_metas a, books b where a.item_id=b.book_id AND
    meta_key='click' ORDER  by
    b.book_kind ,meta_value desc
       ) a,(select @pre:='',@rownum:=0 ) b ) c
    where c.rownum <=10`
          db := AppInit.GetDB().Raw(sql).Scan(prods)
          if db.Error != nil {
             log.Println(db.Error)
          } else {
             b, err := json.Marshal(prods)
             if err != nil {
                log.Println(err)
             }
             cache := &Models.BooksCache{CacheType: Models.CacheType_RankList, CacheContent: string(b), UpdateTime: time.Now()}
             AppInit.GetDB().Set("gorm:insert_option", "ON DUPLICATE KEY UPDATE update_time=now()").Create(cache)
          }
       })
       if err != nil {
          log.Println(err)
       }
    }




  • 相关阅读:
    用word2010发个blog
    停止调试无法关闭控制台
    D11.5.8,Lingo中不支持AS3的ExternalInterface接口
    Lingo03 通用脚本和自定义handler
    Lingo01 术语
    Lingo09 Sprite
    Lingo动态创建script member
    tut11脚本基础
    诡异失败的导入对话框
    Lingo3D01 3D Cast Member的组成
  • 原文地址:https://www.cnblogs.com/hualou/p/12167403.html
Copyright © 2020-2023  润新知