一. 静态缓存(1)(启动服务器时生成本地文件)
在mod_codedb中添加方法,数据库表或者自定义列表
% % -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
% % @doc
% % 表名列表, 一般用于生成模板表数据
% % @end
% % -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
table_list ( ) - >
[
skill_basic
] .
% % -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
% % @doc
% % 自定义列表, 格式为: [ { { Key} , Value} | . . ]
% % @end
% % -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
logic_list ( ) - >
[
skill_effect_id_list,
skill_levelup,
max_level
] .
% % -- -- - 返回格式列表中一个元组就是一条数据,[ { { Key值} , Value值} ]
max_level ( ) - >
List = database: tab2list ( protagonist) ,
Result = lists: keysort (
Record = lists: last ( Result) ,
[ { { null } , Record
% % -- -- - 返回一个列表中多个元组就是多条数据, [ { { Key值1 , Value值} } . . . ]
skill_levelup ( ) - >
lists: foldl (
fun ( Record, L) - >
SkillId = Record
Level = Record
BuffData = Record
EffectData = Record
BuffDataList = string: tokens ( BuffData, "," ) ,
NewBuffDataList = lists: map (
fun ( BuffDataId) - >
database: read (
end,
BuffDataList
) ,
EffectDataList = string: tokens ( EffectData, "," ) ,
NewEffectDataList = lists: map (
fun ( EffectDataId) - >
database: read (
end,
EffectDataList
) ,
[ { { SkillId, Level} , Record
end,
[ ] ,
database: tab2list ( skill_levelup)
) .
定义完成后,启动服务器会在本地ebin内生成(自定义的logic_开头,数据库表的db_开头)
% % -- -- - max_level生成
get ( ) - >
5.
% % -- -- - skill_levelup,
get ( 24 , 3 ) - >
{ skill_levelup, { 24 , 3 } , 24 , 3 , 25 , 99 , [ ] , [ { skill_effect_data, { 383 } , 383 , 10 , 1 , 60 , 0 , 0 , 0 } ] , 300 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ;
get ( 3 , 3 ) - >
{ skill_levelup, { 3 , 3 } , 3 , 3 , 25 , 99 , [ ] , [ { skill_effect_data, { 3 } , 3 , 3 , 1 , 1 , 0 , 0 , 0 } , { skill_effect_data, { 223 } , 223 , 1 , 1 , 120 , 0 , 0 , 0 } ] , 300 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ;
get ( 2 , 9 ) - >
{ skill_levelup, { 2 , 9 } , 2 , 9 , 25 , 99 , [ ] , [ { skill_effect_data, { 8 } , 8 , 8 , 1 , 1 , 0 , 0 , 0 } , { skill_effect_data, { 219 } , 219 , 1 , 1 , 160 , 0 , 0 , 0 } ] , 900 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ;
调用:数据库表生成/自定义列表(带键值和不带键值),定义返回什么格式就返回什么
- define ( CODE_DB ( FileName, Args) , codedb: get ( FileName, Args) ) .
- define ( CODE_LOGIC ( FileName) , codedb: get_logic ( FileName, [ ] ) ) .
- define ( CODE_LOGIC ( FileName, Args) , codedb: get_logic ( FileName, Args) ) .
? CODE_LOGIC ( max_level)
? CODE_LOGIC ( skill_levelup, { SkillId, Level} )
二、 静态缓存(2)(数据库映射工具生成database.hrl本地文件)
数据库所有表数据结构都由工具自动生成了记录格式 存储在了database.hrl中,自定义记录存储在game.hrl 使用数据库映射工具:将数据库中一些配置表,生成宏定义常量存储在database.hrl中,如返回码、常量表、公共服务数据表
三、 动态缓存(内存)ets
服务器启动会加载所有数据库内表的数据进入ets,observer:start()可以查阅 数据库表的以t_开头 自己定义生成的ets不以t_开头