diff --git a/modules/chat/configure.go b/modules/chat/configure.go index 30ad72729..95d69755a 100644 --- a/modules/chat/configure.go +++ b/modules/chat/configure.go @@ -124,3 +124,27 @@ func (this *configureComp) GetChannelRecordMax() (max int32, err error) { } return } + +//获取手动加入频道 任务限制 +func (this *configureComp) GetChannelReadRecordNum() (max int32, err error) { + var ( + v interface{} + configure *cfg.Game_chatChannelComData + ok bool + ) + if v, err = this.GetConfigure(game_chatchannelcom); err != nil { + this.module.Errorf("err:%v", err) + return + } else { + if configure, ok = v.(*cfg.Game_chatChannelCom).GetDataMap()["load_chat"]; !ok { + err = fmt.Errorf("cfg.Game_chatServerGroupData on found max_chat") + this.module.Errorf("err:%v", err) + return + } + max = configure.Value + if max <= 0 { + err = fmt.Errorf("cfg.Game_chatChannelComData max_chat:%v", v) + } + } + return +} diff --git a/modules/chat/modelChat.go b/modules/chat/modelChat.go index e18626a4b..fa4669230 100644 --- a/modules/chat/modelChat.go +++ b/modules/chat/modelChat.go @@ -65,12 +65,13 @@ func (this *modelChatComp) QueryUserMsg(uid string) (result []*pb.DBChat, err er //查询用户未读消息 func (this *modelChatComp) GetChatQueue(channel pb.ChatChannel, union, group, area int32) (result []*pb.DBChat, err error) { var ( - key string - cdata []map[string]string - find bson.M - c *mongo.Cursor - n int - max_chat int32 + key string + cdata []map[string]string + find bson.M + c *mongo.Cursor + n int + max_chat int32 + readmax_chat int32 ) switch channel { case pb.ChatChannel_World: @@ -90,7 +91,13 @@ func (this *modelChatComp) GetChatQueue(channel pb.ChatChannel, union, group, ar find = bson.M{"channel": channel} break } - if cdata, err = this.Batchgetqueues(key); err == nil { + if max_chat, err = this.module.configure.GetChannelRecordMax(); err != nil { + return + } + if readmax_chat, err = this.module.configure.GetChannelReadRecordNum(); err != nil { + return + } + if cdata, err = this.Batchgetqueues(key, readmax_chat); err == nil { result = make([]*pb.DBChat, len(cdata)) for i, v := range cdata { chat := &pb.DBChat{} @@ -100,7 +107,6 @@ func (this *modelChatComp) GetChatQueue(channel pb.ChatChannel, union, group, ar result[i] = chat } } - max_chat, err = this.module.configure.GetChannelRecordMax() if err == redis.RedisNil { //query from mgo diff --git a/modules/comp_model.go b/modules/comp_model.go index a2a8a262b..edaa3836a 100644 --- a/modules/comp_model.go +++ b/modules/comp_model.go @@ -74,7 +74,8 @@ return "OK" //Redis 自定义脚本 批量读取队列数据 var LuaScriptgetQueue = ` local key = tostring(KEYS[1]) -local keys = redis.call("LRANGE", key,0,-1) +local count = tonumber(ARGV[1]) * -1 +local keys = redis.call("LRANGE", key,count,-1) local data = {} for i, v in ipairs(keys) do data[i] = redis.call("HGETALL", v) @@ -121,6 +122,7 @@ for i, v in ipairs(KEYS) do end redis.call("RPush", k,unpack(keys)) local c = tonumber(redis.call("LLEN", k)) +count = count * 3 if (c > count) then local off = c-count out = redis.call("LRANGE", k,0,off-1) @@ -349,7 +351,7 @@ func (this *MCompModel) ChangeList(uid string, _id string, data map[string]inter } //读取全部数据 -func (this *MCompModel) Get(uid string, data interface{}) (err error) { +func (this *MCompModel) Get(uid string, data interface{}, opt ...DBOption) (err error) { if err = this.Redis.HGetAll(this.ukey(uid), data); err != nil && err != redis.RedisNil { return } @@ -359,6 +361,10 @@ func (this *MCompModel) Get(uid string, data interface{}) (err error) { } err = this.Redis.HMSet(this.ukey(uid), data) } + option := newDBOption(opt...) + if option.Expire > 0 { + this.Redis.Expire(this.ukey(uid), option.Expire) + } return } @@ -599,9 +605,9 @@ func (this *MCompModel) Batchsetlists(data map[string]map[string]string) (err er } //批量读取队列数据 -func (this *MCompModel) Batchgetqueues(key string) (result []map[string]string, err error) { +func (this *MCompModel) Batchgetqueues(key string, count int32) (result []map[string]string, err error) { var data interface{} - ret := this.Redis.EvalSha(this.Redis.Context(), this.getQueueSha1, []string{key}) + ret := this.Redis.EvalSha(this.Redis.Context(), this.getQueueSha1, []string{key}, count) if data, err = ret.Result(); err != nil { fmt.Printf("Execute batchgetqueues err: %v", err.Error()) } else {