【架构优化】1.var删除冗余数据;2.champship增加redis缓存,增加读写锁;3.message过滤过期消息,删除空信箱
This commit is contained in:
parent
a80d65ccd2
commit
9b08cdebe6
@ -850,8 +850,8 @@ func (c *ChampshipMgr) SetRankCache(Uid int) {
|
||||
PreGroupId := c.getData().PreGroupInfo[Uid]
|
||||
GroupId := c.getData().GroupInfo[Uid]
|
||||
key := fmt.Sprintf("champship_rank_cache_%d", Uid)
|
||||
log.Debug("GetRankCache key:%s; data:%s", key, fmt.Sprintf("%d_%d_%d_%d", PreRank, Rank, PreGroupId, GroupId))
|
||||
db.RedisSetKey(key, fmt.Sprintf("%d_%d_%d_%d", PreRank, Rank, PreGroupId, GroupId), 86400*2)
|
||||
log.Debug("SetRankCache key:%s; data:%s", key, fmt.Sprintf("%d_%d_%d_%d", PreRank, Rank, PreGroupId, GroupId))
|
||||
db.RedisSetKey(key, fmt.Sprintf("%d_%d_%d_%d", PreRank, Rank, PreGroupId, GroupId), time.Second*172800)
|
||||
}
|
||||
|
||||
func GetRankCache(Uid int) (int, int, int, int) {
|
||||
|
||||
@ -132,6 +132,7 @@ func FixBug() {
|
||||
// 先更新 PlayerList(需要加锁)
|
||||
messageMgrData.mu.Lock()
|
||||
defer messageMgrData.mu.Unlock()
|
||||
now := GoUtil.Now()
|
||||
for k, v := range messageMgrData.MessageList {
|
||||
if k < 100000 {
|
||||
delete(messageMgrData.MessageList, k)
|
||||
@ -139,11 +140,14 @@ func FixBug() {
|
||||
}
|
||||
// 反向遍历以安全删除元素
|
||||
for i := len(v.Messages) - 1; i >= 0; i-- {
|
||||
if v.Messages[i].Type == msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY {
|
||||
if v.Messages[i].Type == msg.HANDLE_TYPE_CHAMPSHIP_NOTIFY || (v.Messages[i].End != 0 && v.Messages[i].End < now) {
|
||||
// 删除消息
|
||||
v.Messages = append(v.Messages[:i], v.Messages[i+1:]...)
|
||||
}
|
||||
}
|
||||
if len(v.Messages) == 0 {
|
||||
delete(messageMgrData.MessageList, k)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -175,7 +179,7 @@ func (m *MessageMgr) CenterRegister() {
|
||||
m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_RANK_INFO, MessageHandlerFunc(ChampshipRankInfoHandler))
|
||||
m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_RANK_LIST, MessageHandlerFunc(ChampshipRankListHandler))
|
||||
m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_PRE_RANK, MessageHandlerFunc(ChampshipRankPreHandler))
|
||||
m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_GROUP, MessageHandlerFunc(ChampshipInRankHandler))
|
||||
m.RegisterHandler(msg.HANDLE_MOD_CHAMPSHIP_GROUP, MessageHandlerFunc(ChampshipGroupHandler))
|
||||
}
|
||||
}
|
||||
|
||||
@ -295,6 +299,15 @@ func PlayerLoginHandler(data *msg.Msg) (interface{}, error) {
|
||||
messages := getMessge(int64(data.From))
|
||||
messages.mu.Lock()
|
||||
// 复制消息列表,避免在锁内发送消息
|
||||
// 过滤过期消息
|
||||
now := GoUtil.Now()
|
||||
validMessages := make([]*msg.Msg, 0, len(messages.Messages))
|
||||
for _, message := range messages.Messages {
|
||||
if message.End == 0 || message.End >= now {
|
||||
validMessages = append(validMessages, message)
|
||||
}
|
||||
}
|
||||
messages.Messages = validMessages
|
||||
messagesToSend := make([]*msg.Msg, len(messages.Messages))
|
||||
copy(messagesToSend, messages.Messages)
|
||||
messages.mu.Unlock()
|
||||
@ -935,5 +948,12 @@ func deleteMessage(m *msg.Msg) error {
|
||||
messages.Messages[len(messages.Messages)-1] = nil // 清除最后一个元素的引用
|
||||
messages.Messages = messages.Messages[:len(messages.Messages)-1]
|
||||
}
|
||||
if len(messages.Messages) == 0 {
|
||||
// 如果消息列表为空,则删除该玩家的消息列表
|
||||
messageMgrData := getMessageData()
|
||||
messageMgrData.mu.Lock()
|
||||
defer messageMgrData.mu.Unlock()
|
||||
delete(messageMgrData.MessageList, int64(m.To))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -59,12 +59,31 @@ func (f *VarMgr) Init() {
|
||||
if f.getData().ZeroTime == GoUtil.ZeroTimestamp() {
|
||||
f.ZeroUpdate()
|
||||
}
|
||||
|
||||
f.mDispatr.AfterFunc(time.Duration(GoUtil.NextZeroTimestampDuration())*time.Second, func() {
|
||||
f.ZeroUpdate()
|
||||
})
|
||||
}
|
||||
|
||||
func (f *VarMgr) fixbug() {
|
||||
data := f.getData()
|
||||
data.mu.Lock()
|
||||
defer data.mu.Unlock()
|
||||
for k, v := range data.NewUseVar {
|
||||
if v != nil {
|
||||
del := true
|
||||
for _, ved := range v {
|
||||
if ved.D.(int) != 0 {
|
||||
del = false
|
||||
}
|
||||
}
|
||||
if del {
|
||||
delete(data.NewUseVar, k)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (f *VarMgr) version() {
|
||||
switch v := f.getData().Version; v {
|
||||
case 0:
|
||||
@ -84,6 +103,10 @@ func (f *VarMgr) version() {
|
||||
}
|
||||
}
|
||||
f.getData().Version = 1
|
||||
case 1:
|
||||
// future version update
|
||||
f.fixbug() // 修复用户变量冗余数据
|
||||
f.getData().Version = 2
|
||||
}
|
||||
}
|
||||
|
||||
@ -148,7 +171,7 @@ func (f *VarMgr) GetUserVar(uid int, key string) *VarExpireData {
|
||||
varData := f.getData().NewUseVar[uid]
|
||||
if varData == nil {
|
||||
varData = make(map[string]*VarExpireData)
|
||||
f.getData().NewUseVar[uid] = varData
|
||||
//f.getData().NewUseVar[uid] = varData
|
||||
}
|
||||
ved, ok := varData[key]
|
||||
if !ok {
|
||||
@ -165,19 +188,6 @@ func (f *VarMgr) SetVar(key string, value interface{}) {
|
||||
SaveCacheVarData(key, f.getData().NewVar[key])
|
||||
}
|
||||
|
||||
func (f *VarMgr) GetVar(key string) *VarExpireData {
|
||||
if v, ok := f.getData().NewVar[key]; ok {
|
||||
return v
|
||||
}
|
||||
data := &VarExpireData{}
|
||||
f.getData().NewVar[key] = data
|
||||
return data
|
||||
}
|
||||
|
||||
func (f *VarMgr) DelVar(key string) {
|
||||
delete(f.getData().Var, key)
|
||||
}
|
||||
|
||||
func (f *VarMgr) getData() *VarData {
|
||||
return f.data.(*VarData)
|
||||
}
|
||||
@ -227,6 +237,8 @@ func SetVarDataHandler(m *msg.Msg) (interface{}, error) {
|
||||
|
||||
func GetUserVarDataHandler(m *msg.Msg) (interface{}, error) {
|
||||
data := getVarData()
|
||||
data.mu.Lock()
|
||||
defer data.mu.Unlock()
|
||||
userVar := &VarExpireData{}
|
||||
if v, ok := m.Extra.(msg.VarData); ok {
|
||||
if varData, ok := data.NewUseVar[m.From]; ok {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user