修改计划任务的持久化,act与kv的缓存逻辑,预防多服务器重复持久化
This commit is contained in:
@@ -17,7 +17,9 @@ func Boot() (err error) {
|
|||||||
|
|
||||||
//用户活动持久化
|
//用户活动持久化
|
||||||
service.SystemCron().AddCronV2(v1.CronType_DAILY, func(ctx context.Context) error {
|
service.SystemCron().AddCronV2(v1.CronType_DAILY, func(ctx context.Context) error {
|
||||||
return service.GameAct().Saves(ctx)
|
err = service.GameKv().SavesV1()
|
||||||
|
err = service.GameAct().Saves(ctx)
|
||||||
|
return err
|
||||||
})
|
})
|
||||||
|
|
||||||
//初始化自启动方法
|
//初始化自启动方法
|
||||||
|
|||||||
@@ -107,6 +107,14 @@ func (s *sGameAct) Set(uid int64, actId int, data interface{}) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *sGameAct) Saves(ctx context.Context) (err error) {
|
func (s *sGameAct) Saves(ctx context.Context) (err error) {
|
||||||
|
getCache, _ := pkg.Cache("redis").Get(nil, "cron:game_act")
|
||||||
|
//如果没有执行过,设置时间戳
|
||||||
|
if getCache.Int64() > 0 {
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
pkg.Cache("redis").Set(nil, "cron:game_act", gtime.Now().Unix(), time.Hour)
|
||||||
|
}
|
||||||
|
|
||||||
//遍历执行
|
//遍历执行
|
||||||
ActList.Iterator(func(i interface{}) bool {
|
ActList.Iterator(func(i interface{}) bool {
|
||||||
err = s.Save(ctx, i.(int))
|
err = s.Save(ctx, i.(int))
|
||||||
|
|||||||
@@ -1,13 +1,17 @@
|
|||||||
package gameKv
|
package gameKv
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"github.com/ayflying/utility_go/pkg"
|
||||||
"github.com/ayflying/utility_go/service"
|
"github.com/ayflying/utility_go/service"
|
||||||
"github.com/ayflying/utility_go/tools"
|
"github.com/ayflying/utility_go/tools"
|
||||||
"github.com/gogf/gf/v2/frame/g"
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
"github.com/gogf/gf/v2/os/gctx"
|
"github.com/gogf/gf/v2/os/gctx"
|
||||||
|
"github.com/gogf/gf/v2/os/gtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -25,10 +29,6 @@ func New() *sGameKv {
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
service.RegisterGameKv(New())
|
service.RegisterGameKv(New())
|
||||||
|
|
||||||
//支付钩子
|
|
||||||
//task.Task.Trigger(tasks.TaskType_PAY, service.GameKv().HookPay)
|
|
||||||
//task.Task.Trigger(tasks.TaskType_WARDROBE_LEVEL, service.GameKv().HookLevelRwd)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SavesV1 方法
|
// SavesV1 方法
|
||||||
@@ -37,6 +37,14 @@ func init() {
|
|||||||
// @receiver s: sGameKv的实例。
|
// @receiver s: sGameKv的实例。
|
||||||
// @return err: 错误信息,如果操作成功,则为nil。
|
// @return err: 错误信息,如果操作成功,则为nil。
|
||||||
func (s *sGameKv) SavesV1() (err error) {
|
func (s *sGameKv) SavesV1() (err error) {
|
||||||
|
getCache, err := pkg.Cache("redis").Get(nil, "cron:game_kv")
|
||||||
|
//如果没有执行过,设置时间戳
|
||||||
|
if getCache.Int64() > 0 {
|
||||||
|
return
|
||||||
|
} else {
|
||||||
|
pkg.Cache("redis").Set(nil, "cron:game_kv", gtime.Now().Unix(), time.Hour)
|
||||||
|
}
|
||||||
|
|
||||||
// 从Redis列表中获取所有用户KV索引的键
|
// 从Redis列表中获取所有用户KV索引的键
|
||||||
//keys, err := utils.RedisScan("user:kv:*")
|
//keys, err := utils.RedisScan("user:kv:*")
|
||||||
err = tools.Redis.RedisScanV2("user:kv:*", func(keys []string) (err error) {
|
err = tools.Redis.RedisScanV2("user:kv:*", func(keys []string) (err error) {
|
||||||
@@ -69,12 +77,17 @@ func (s *sGameKv) SavesV1() (err error) {
|
|||||||
//if user.UpdatedAt.Seconds < gtime.Now().Add(consts.ActSaveTime).Unix() {
|
//if user.UpdatedAt.Seconds < gtime.Now().Add(consts.ActSaveTime).Unix() {
|
||||||
// continue
|
// continue
|
||||||
//}
|
//}
|
||||||
|
//如果有活跃,跳过持久化
|
||||||
|
if getBool, _ := pkg.Cache("redis").
|
||||||
|
Contains(ctx, fmt.Sprintf("act:update:%d", uid)); getBool {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
get, _ := g.Redis().Get(ctx, cacheKey)
|
get, _ := g.Redis().Get(ctx, cacheKey)
|
||||||
var data interface{}
|
var data interface{}
|
||||||
get.Scan(&data)
|
get.Scan(&data)
|
||||||
list = append(list, &ListData{
|
list = append(list, &ListData{
|
||||||
Uid: int64(uid),
|
Uid: uid,
|
||||||
Kv: data,
|
Kv: data,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ func init() {
|
|||||||
g.Log().Debug(ctx, "utility_go init启动完成")
|
g.Log().Debug(ctx, "utility_go init启动完成")
|
||||||
// 初始化配置
|
// 初始化配置
|
||||||
var err = boot.Boot()
|
var err = boot.Boot()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user