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