diff --git a/internal/logic/admin/user/deleteUserSubscribeLogic.go b/internal/logic/admin/user/deleteUserSubscribeLogic.go index 397299d..209c23e 100644 --- a/internal/logic/admin/user/deleteUserSubscribeLogic.go +++ b/internal/logic/admin/user/deleteUserSubscribeLogic.go @@ -48,5 +48,9 @@ func (l *DeleteUserSubscribeLogic) DeleteUserSubscribe(req *types.DeleteUserSubs l.Errorw("failed to clear subscribe cache", logger.Field("error", err.Error()), logger.Field("subscribeId", userSubscribe.SubscribeId)) return errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "failed to clear subscribe cache: %v", err.Error()) } + if err = l.svcCtx.NodeModel.ClearServerAllCache(l.ctx); err != nil { + l.Errorf("ClearServerAllCache error: %v", err.Error()) + return errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "failed to clear server cache: %v", err.Error()) + } return nil } diff --git a/internal/logic/admin/user/updateUserSubscribeLogic.go b/internal/logic/admin/user/updateUserSubscribeLogic.go index 9d92ce5..23c2d2f 100644 --- a/internal/logic/admin/user/updateUserSubscribeLogic.go +++ b/internal/logic/admin/user/updateUserSubscribeLogic.go @@ -69,5 +69,10 @@ func (l *UpdateUserSubscribeLogic) UpdateUserSubscribe(req *types.UpdateUserSubs l.Errorw("failed to clear subscribe cache", logger.Field("error", err.Error()), logger.Field("subscribeId", userSub.SubscribeId)) return errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "failed to clear subscribe cache: %v", err.Error()) } + + if err = l.svcCtx.NodeModel.ClearServerAllCache(l.ctx); err != nil { + l.Errorf("ClearServerAllCache error: %v", err.Error()) + return errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "failed to clear server cache: %v", err.Error()) + } return nil } diff --git a/internal/logic/auth/deviceLoginLogic.go b/internal/logic/auth/deviceLoginLogic.go index d152f3e..69250d1 100644 --- a/internal/logic/auth/deviceLoginLogic.go +++ b/internal/logic/auth/deviceLoginLogic.go @@ -301,5 +301,8 @@ func (l *DeviceLoginLogic) activeTrial(userId int64, db *gorm.DB) error { logger.Field("traffic", sub.Traffic), ) + if clearErr := l.svcCtx.NodeModel.ClearServerAllCache(l.ctx); clearErr != nil { + l.Errorf("ClearServerAllCache error: %v", clearErr.Error()) + } return nil } diff --git a/internal/logic/auth/telephoneUserRegisterLogic.go b/internal/logic/auth/telephoneUserRegisterLogic.go index af16811..5fad294 100644 --- a/internal/logic/auth/telephoneUserRegisterLogic.go +++ b/internal/logic/auth/telephoneUserRegisterLogic.go @@ -245,5 +245,12 @@ func (l *TelephoneUserRegisterLogic) activeTrial(uid int64) error { UUID: uuidx.NewUUID().String(), Status: 1, } - return l.svcCtx.UserModel.InsertSubscribe(l.ctx, userSub) + err = l.svcCtx.UserModel.InsertSubscribe(l.ctx, userSub) + if err != nil { + return err + } + if clearErr := l.svcCtx.NodeModel.ClearServerAllCache(l.ctx); clearErr != nil { + l.Errorf("ClearServerAllCache error: %v", clearErr.Error()) + } + return err } diff --git a/internal/logic/auth/userRegisterLogic.go b/internal/logic/auth/userRegisterLogic.go index cf959a9..0198911 100644 --- a/internal/logic/auth/userRegisterLogic.go +++ b/internal/logic/auth/userRegisterLogic.go @@ -231,5 +231,12 @@ func (l *UserRegisterLogic) activeTrial(uid int64) error { UUID: uuidx.NewUUID().String(), Status: 1, } - return l.svcCtx.UserModel.InsertSubscribe(l.ctx, userSub) + err = l.svcCtx.UserModel.InsertSubscribe(l.ctx, userSub) + if err != nil { + return err + } + if clearErr := l.svcCtx.NodeModel.ClearServerAllCache(l.ctx); clearErr != nil { + l.Errorf("ClearServerAllCache error: %v", clearErr.Error()) + } + return err } diff --git a/internal/logic/public/user/resetUserSubscribeTokenLogic.go b/internal/logic/public/user/resetUserSubscribeTokenLogic.go index febcae7..56919f9 100644 --- a/internal/logic/public/user/resetUserSubscribeTokenLogic.go +++ b/internal/logic/public/user/resetUserSubscribeTokenLogic.go @@ -83,6 +83,9 @@ func (l *ResetUserSubscribeTokenLogic) ResetUserSubscribeToken(req *types.ResetU l.Errorw("ClearSubscribeCache failed", logger.Field("error", err.Error()), logger.Field("subscribeId", userSub.SubscribeId)) return errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "ClearSubscribeCache failed: %v", err.Error()) } - + if err = l.svcCtx.NodeModel.ClearServerAllCache(l.ctx); err != nil { + l.Errorf("ClearServerAllCache error: %v", err.Error()) + return errors.Wrapf(xerr.NewErrCode(xerr.ERROR), "failed to clear server cache: %v", err.Error()) + } return nil } diff --git a/internal/model/node/model.go b/internal/model/node/model.go index ddfa736..ed91ca2 100644 --- a/internal/model/node/model.go +++ b/internal/model/node/model.go @@ -13,6 +13,7 @@ type customServerLogicModel interface { FilterServerList(ctx context.Context, params *FilterParams) (int64, []*Server, error) FilterNodeList(ctx context.Context, params *FilterNodeParams) (int64, []*Node, error) ClearNodeCache(ctx context.Context, params *FilterNodeParams) error + ClearServerAllCache(ctx context.Context) error } const ( @@ -171,6 +172,30 @@ func (m *customServerModel) ClearServerCache(ctx context.Context, serverId int64 return nil } +func (m *customServerModel) ClearServerAllCache(ctx context.Context) error { + var cursor uint64 + var keys []string + prefix := ServerConfigCacheKey + "*" + for { + scanKeys, newCursor, err := m.Cache.Scan(ctx, cursor, prefix, 999).Result() + if err != nil { + m.Logger.Error(ctx, fmt.Sprintf("ClearServerAllCache err:%v", err)) + break + } + m.Logger.Info(ctx, fmt.Sprintf("ClearServerAllCache query keys:%v", scanKeys)) + keys = append(keys, scanKeys...) + cursor = newCursor + if cursor == 0 { + break + } + } + if len(keys) > 0 { + m.Logger.Info(ctx, fmt.Sprintf("ClearServerAllCache keys:%v", keys)) + return m.Cache.Del(ctx, keys...).Err() + } + return nil +} + // InSet 支持多值 OR 查询 func InSet(field string, values []string) func(db *gorm.DB) *gorm.DB { return func(db *gorm.DB) *gorm.DB {