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)
   }
}




posted @ 2020-01-08 16:33  离地最远的星  阅读(463)  评论(0编辑  收藏  举报