rebar3 服务器

This commit is contained in:
lwt
2026-05-19 11:30:21 +08:00
parent aeb18acee0
commit 03fd2da480
5187 changed files with 3670646 additions and 0 deletions
@@ -0,0 +1,204 @@
-ifndef(__MS_CACHE_HRL__).
-define(__MS_CACHE_HRL__, true).
-include("base.hrl").
-define(MS_CACHE, ms_cache).
-define(WORKER_COUNTER_DEFAULT, 8).
-define(WORKER_INIT_TIME_MIN, 100).
%% 需要更新的数据超过指定数量,立即触发存盘,默认只为1000
-define(SYNC_NUM, ms_cache_config:get_env(db_save_count, 1000)).
%% 缓存保存到数据库时间,默认10分钟保存一次
-define(DB_SAVE_TIME, ms_cache_config:get_env(db_save_time, 600000)).
%% 安全模式(待修改的数据有备份到dets或其他落地数据库)
-define(SAFE_MODE, ms_cache_config:get_env(safe_mode, false)).
%% 错误信息
-define(ERR_MSG(Tab, Key, Reason), ms_cache_util:get_error_message(Tab, Key, Reason)).
%% 根据类型获取缓存表名
-define(TABLE_NAME(Tab, Type), (ms_cache_util:get_table_name(Tab, Type))).
-define(TABLE_NAME(Tab, Type, WorkNum), (ms_cache_util:get_table_name(Tab, Type, WorkNum))).
%% 获取缓存数据节点
-define(DATA_NODE, (ms_cache_util:get_data_node())).
%% 获取缓存表处理的模块
%%-define(TABLE_HANDLER(Tab), (list_to_atom(lists:concat([Tab, "_c"])))).
-define(TABLE_HANDLER(Tab), (ms_cache_config:get({?MS_CACHE, handler, Tab}))).
-define(SET_TABLE_HANDLER(Tab, Handler), (ms_cache_config:put({?MS_CACHE, handler, Tab}, Handler))).
%% 缓存数据转换为record形式
-define(TO_REC(Data), (ms_cache_util:map_to_record(Data))).
%% 缓存数据转换为map形式
-define(TO_MAP(Data), (ms_cache_util:record_to_map(Data))).
%% 缓存数据格式转换
-define(FMT_DATA(Data), (ms_cache_util:format_data(Data))).
%% 单次清理缓存数据的数量
-define(CACHE_REMOVE_LIMIT, 1000).
%% 获取数据库连接池名
-define(SELECT_POOL, ms_cache_config:get_env(db_select_pool_name, undefined)).
-define(UPDATE_POOL, ms_cache_config:get_env(db_update_pool_name, undefined)).
%% 读写模式 concurrency | serial
-define(CONCURRENCY, concurrency).
-define(SERIAL, serial).
-define(RW_MODE, ms_cache_config:get_env(rw_mode, ?CONCURRENCY)).
%% 数据同步模式 data | key todo key模式当前有bug,关服时缓存data表先被删除,导致同步进程查询的时候报错
-define(DATA_SYNC_MODE_DATA, data). %% 同步变化的整个数据 record | map
-define(DATA_SYNC_MODE_KEY, key). %% 只同步变化的key
-define(DATA_SYNC_MODE, ms_cache_config:get_env(data_sync_mode, ?DATA_SYNC_MODE_DATA)).
%% 获取表的handler名称
-define(TABLE_HANDLER_NAME(Table), list_to_atom(lists:concat([Table, "_c"]))).
-define(MS_CACHE_DB_DROP_AUTH, ms_cache_config:get_env(db_drop_auth, ?FALSE)).
-define(OPT_TABLE_MAX, 10).
-define(OPT_TABLE_LIST(Table), [erlang:list_to_atom(erlang:atom_to_list(?TABLE_NAME(Table, opt)) ++ "_" ++ erlang:integer_to_list(Num)) || Num<-lists:seq(1, ?OPT_TABLE_MAX)]).
%% 缓存使用的内存表.
%% ms_cache_mdb : mnesia作为缓存表
%% ms_cache_edb : ets set数据表 + ets ordered_set索引表 (仿mnesia写法,mnesia简化版,综合性能最好)
%% ms_cache_edb2 : ets set数据表 + ets bag索引表 (插入和删除性能较差)
%% ms_cache_edb3 : ets set数据表 + ets set索引表 (大数据性能差,别用,只用来测试对比)
-define(MS_CACHE_DB_MOD, (ms_cache_util:get_cache_db_mod())).
%% 数据库操作标志
-record(ms_cache_opt, {
key = 0,
opt = none, %% insert | update | delete
opt_rec = none
}).
%% 复合主键的数据,以第一个key作为索引的所有key列表
-record(ms_cache_idx, {
key = 0,
val = []
}).
%% 数据加载标志
-record(ms_cache_load, {
key = 0,
val = none %%{Key, none} - 无Key对应数据 | {Index, index_loaded} - 复合主键以第一个key为所以的数据已加载 | {Table, table_loaded} - 整表数据已加载
}).
-record(ms_cache_expired, {
key = 0, %% 缓存清理key | 缓存清理index(复合主键)
val = none
}).
%% atom define
-ifndef(OK).
-define(OK, ok).
-endif.
-ifndef(TRUE).
-define(TRUE, true).
-endif.
-ifndef(FALSE).
-define(FALSE, false).
-endif.
-ifndef(UNDEFINED).
-define(UNDEFINED, undefined).
-endif.
-ifndef(INDEFINITELY).
-define(INDEFINITELY, indefinitely).
-endif.
-ifndef(CONTINUE).
-define(CONTINUE, continue).
-endif.
-ifndef(IGNORE).
-define(IGNORE, ignore).
-endif.
-ifndef(INFINITY).
-define(INFINITY, infinity).
-endif.
-ifndef(ERROR).
-define(ERROR, error).
-endif.
-ifndef(NONE).
-define(NONE, none).
-endif.
-ifndef(STOP).
-define(STOP, stop).
-endif.
-ifndef(SKIP).
-define(SKIP, skip).
-endif.
%% 封装处理handle_continue
-define(TRY_CONTINUE(Msg, State),
try
do_continue(Msg, State)
catch _:ErrMsgDoNotRepeatName:Trace ->
?ERROR(?MODULE, "handle continue: Msg = ~p, ErrMsg = ~p, Trace = ~p", [Msg, ErrMsgDoNotRepeatName, Trace]),
{noreply, State}
end
).
%% 封装处理handle_call
-define(TRY_CALL(Msg, From, State),
try
do_call(Msg, From, State)
catch _:ErrMsgDoNotRepeatName:Trace ->
?ERROR(?MODULE, "handle call: Msg = ~p, ErrMsg = ~p, Trace = ~p", [Msg, ErrMsgDoNotRepeatName, Trace]),
{reply, ok, State}
end
).
-define(TRY_CALL(Msg, State),
try
do_call(Msg, State)
catch _:ErrMsgDoNotRepeatName:Trace ->
?ERROR(?MODULE, "handle call: Msg = ~p, ErrMsg = ~p, Trace = ~p", [Msg, ErrMsgDoNotRepeatName, Trace]),
{reply, ok, State}
end
).
%% 封装处理handle_cast
-define(TRY_CAST(Msg, State),
try
do_cast(Msg, State)
catch _:ErrMsgDoNotRepeatName:Trace ->
?ERROR(?MODULE, "handle cast: Msg = ~p, ErrMsg = ~p, Trace = ~p", [Msg, ErrMsgDoNotRepeatName, Trace]),
{noreply, State}
end
).
%% 封装处理handle_info
-define(TRY_INFO(Msg, State),
try
do_info(Msg, State)
catch _:ErrMsgDoNotRepeatName:Trace ->
?ERROR(?MODULE, "handle info: Msg = ~p, ErrMsg = ~p, Trace = ~p", [Msg, ErrMsgDoNotRepeatName, Trace]),
{noreply, State}
end
).
%%% 打印函数
%% 进程字典的读取和存储
-define(PUT_TO_PROC_DICT(Key, Val), erlang:put({?MODULE, Key}, Val)).
-define(GET_FROM_PROC_DICT(Key), erlang:get({?MODULE, Key})).
-define(GET_FROM_PROC_DICT(Key, Default),
case erlang:get({?MODULE, Key}) of
?UNDEFINED ->
Default;
Val ->
Val
end ).
-define(ERASE_FROM_PROC_DICT(Key), erlang:erase({?MODULE, Key})).
-type ms_cache_key() :: integer() | atom() | binary().
-endif.