From c08701f9706e31b2564eb4b5e47c8870faf0ae96 Mon Sep 17 00:00:00 2001 From: hujiebin Date: Thu, 27 Jul 2023 15:21:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E9=80=81=E7=A4=BC=E6=8E=A8?= =?UTF-8?q?=E8=8D=90=E7=94=A8=E6=88=B7,=E5=A4=9A=E8=BF=9B=E7=A8=8B?= =?UTF-8?q?=E9=83=BD=E9=9C=80=E8=A6=81=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cron/cron.go | 2 ++ cron/user_cron/gift_user.go | 20 ++++++++++++++++++++ domain/model/recommend_m/gift.go | 18 ++++++++++-------- 3 files changed, 32 insertions(+), 8 deletions(-) create mode 100644 cron/user_cron/gift_user.go diff --git a/cron/cron.go b/cron/cron.go index eeef2b4..c2c4b5e 100644 --- a/cron/cron.go +++ b/cron/cron.go @@ -4,9 +4,11 @@ import ( "git.hilo.cn/hilo-common/resource/config" "hilo-user/cron/cp_cron" "hilo-user/cron/gift_cron" + "hilo-user/cron/user_cron" ) func Init() { + user_cron.SyncGiftRecommendUsers() // 同步送礼推荐用户,多进程都需要执行 if !config.IsMaster() { return } diff --git a/cron/user_cron/gift_user.go b/cron/user_cron/gift_user.go new file mode 100644 index 0000000..3a4c726 --- /dev/null +++ b/cron/user_cron/gift_user.go @@ -0,0 +1,20 @@ +package user_cron + +import ( + "git.hilo.cn/hilo-common/domain" + "github.com/robfig/cron" + "hilo-user/domain/model/recommend_m" +) + +// 定期同步礼物推荐用户 +func SyncGiftRecommendUsers() { + go recommend_m.SyncPastTop50SendGiftUsers(domain.CreateModelNil()) // 启动先同步一次 + + c := cron.New() + spec := "0 */5 * * * ?" + _ = c.AddFunc(spec, func() { + var model = domain.CreateModelNil() + recommend_m.SyncPastTop50SendGiftUsers(model) + }) + c.Start() +} diff --git a/domain/model/recommend_m/gift.go b/domain/model/recommend_m/gift.go index 430691d..fae95a8 100644 --- a/domain/model/recommend_m/gift.go +++ b/domain/model/recommend_m/gift.go @@ -17,12 +17,7 @@ var recommendUserGiftKey = "recommendUserGiftKey" var recommendUserGiftCache = gcache.New(1).LRU().Build() // 推荐最近送礼的50人,最近12小时赠送礼物大于100k的用户 -// 先lru cache,后db -// ttl: 5min -func GetPastTop50SendGiftUsers(model *domain.Model) []recommendUserGift { - if data, err := recommendUserGiftCache.Get(recommendUserGiftKey); err == nil { - return data.([]recommendUserGift) - } +func SyncPastTop50SendGiftUsers(model *domain.Model) { limitUserIds, _ := GetBillboardLimitUserList(model) var res []recommendUserGift if err := model.DB().Table("gift_operate g").Joins("INNER JOIN user u ON u.id = g.send_user_id").Select("send_user_id,SUM(send_user_diamond) send_user_diamond"). @@ -33,8 +28,15 @@ func GetPastTop50SendGiftUsers(model *domain.Model) []recommendUserGift { Having("send_user_diamond > 100000").Order("send_user_diamond DESC").Limit(34).Find(&res).Error; err != nil { model.Log.Errorf("GetPastTop50SendGiftUsers fail:%v", err) } - recommendUserGiftCache.SetWithExpire(recommendUserGiftKey, res, time.Minute*5) - return res + _ = recommendUserGiftCache.Set(recommendUserGiftKey, res) +} + +// 只从缓存中拿 +func GetPastTop50SendGiftUsers(model *domain.Model) []recommendUserGift { + if data, err := recommendUserGiftCache.Get(recommendUserGiftKey); err == nil { + return data.([]recommendUserGift) + } + return []recommendUserGift{} } // 榜单黑名单 -- 2.22.0