123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- --[[
- 带缓存的表配置读取帮助函数
-
- local tableConfig = gettable("cfg_xxx")
- 用
- local tableConfig = ConfigDataManager.getList("cfg_xxx")
- 替代
-
- 这么实现的原因:gettable命令用于读取表数据,而且往往会返回大量的数据(多条记录或整个表)。根据压测监控发现,将java中数据传递到lua脚本空间中需要大量拷贝操作,很消耗CPU,因此在脚本中直接缓存了数据来提高性能
-
- 注:如有热更新表的操作,需要同步热更新脚本
- ]]
- ConfigDataManager = {}
- local configMap = {}
- local configItemMap = {}
- local tableValueMap = {}
- function ConfigDataManager.clear()
- configMap = {}
- configItemMap = {}
- tableValueMap = {}
- end
- ---读取整个表配置
- function ConfigDataManager.getList(tableName)
- local found = table.getValue(configMap, tableName)
- if found ~= nil then
- return found
- end
- local configList = gettable(tableName)
- if configList ~= nil then
- configMap[tableName] = configList
- return configList
- end
- return nil
- end
- ---读取单个表配置项
- function ConfigDataManager.getById(tableName, id)
- local configList = ConfigDataManager.getTable(tableName, "id", id)
- if configList ~= nil and table.count(configList) >= 1 then
- return configList[1]
- end
- return nil
- end
- ---和java的gettable一样,返回列表的第一行
- function ConfigDataManager.getTableFirst(tableName, ...)
- local configList = ConfigDataManager.getTable(tableName, ...)
- if configList ~= nil and table.count(configList) >= 1 then
- return configList[1]
- end
- return nil
- end
- ---和java的gettable一样,返回的是列表
- function ConfigDataManager.getTable(tableName, ...)
- local success, ret = xpcall(getTable0, debug.traceback, tableName, ...)
- gameDebug.assertTrue(success, "getTable error", ret, "参数 ", tableName, ...)
- return ret
- end
- ---和java的gettablevalue一样,返回的是单个值
- function ConfigDataManager.getTableValue(tableName, ...)
- local success, ret = xpcall(getTableValue0, debug.traceback, tableName, ...)
- gameDebug.assertTrue(success, "getTableValue error", ret, "参数 ", tableName, ...)
- return ret
- end
- ---和java的gettable一样,返回的是列表
- function getTable0(tableName, ...)
- local args = { ... }
- local _key = tableName
- for i, v in pairs(args) do
- _key = _key .. "#" .. v
- end
- local found = table.getValue(configItemMap, _key)
- if found ~= nil then
- return found
- end
- local configList = gettable(tableName, ...)
- if configList ~= nil and table.count(configList) >= 1 then
- configItemMap[_key] = configList
- return configList
- end
- return nil
- end
- ---和java的gettablevalue一样,返回的是单个值
- function getTableValue0(tableName, ...)
- local args = { ... }
- local _key = tableName
- for i, v in pairs(args) do
- _key = _key .. "#" .. v
- end
- local found = table.getValue(tableValueMap, _key)
- if found ~= nil then
- return found
- end
- local cfg = gettablevalue(tableName, ...)
- if cfg ~= nil then
- tableValueMap[_key] = cfg
- return cfg
- end
- return nil
- end
|