id_generator
简介
各种id生成整合在此
- 远程生成唯一uid/rid
- 本地生成uid/rid
- 本地生成长guid
- 本地生成当前进程生命周期内的唯一段id
组件接口
id_generator.gs
函数原型 | 函数作用 |
---|---|
void init_uid(map para) | 初始化uid生成功能(基于redis) |
string new_uid(string type = nil) | 生成一个指定类型的uid |
int new_uid_as_int(string type = nil) | 生成一个指定类型的int型的uid |
void init_rid(int unique_id) | 初始化rid生成功能 |
string new_rid() | 生成一个rid |
int new_rid_as_int() | 生成一个int型rid |
string new_guid() | 生成一个GUID |
int new_cookie() | 生成当前进程生命周期内的唯一cookie值 |
string new_cookie_as_string() | 生成当前进程生命周期内的唯一string型cookie值 |
样例
import pkg.hiredis;
import pkg.redis_pool;
import pkg.gtest;
void create()
{
map redis_cfg = {
"thread_num" : 1,
};
hiredis.setup_redis(redis_cfg);
map reidis_dbs = {
"id_generator_test" : { // db
"driver": "redis",
"host": "127.0.0.1",
"port": 6379,
"passwd": "",
"db_index": 3,
"is_cluster": false,
},
};
for (string db, map db_config : reidis_dbs)
redis_pool=>set_db_config(db, db_config);
map para = {
"db" : "id_generator_test",
"name" : "test_uid",
};
id_generator.init_uid(para);
id_generator.init_rid(8);
}
public void run()
{
coroutine co = coroutine.create_with_domain(nil, domain.create(), (: co_entry :));
co.wait();
}
void co_entry()
{
int n = 1000;
int index = 1;
// begin @ id_generator.new_uid
int st = time.time_ms();
for (int i = 1 upto n)
{
id_generator.new_uid();
}
int dt = time.time_ms() - st;
// end
printf("[%d]==>total: %d, cost: %d ms, aver: %f ms\n", index, n, dt, 1.0 * dt / n);
index++;
// begin @ id_generator.new_rid
st = time.time_ms();
for (int i = 1 upto n)
{
id_generator.new_rid();
}
dt = time.time_ms() - st;
// end
printf("[%d]==>total: %d, cost: %d ms, aver: %f ms\n", index, n, dt, 1.0 * dt / n);
index++;
// begin @ id_generator.new_guid
st = time.time_ms();
for (int i = 1 upto n)
{
id_generator.new_guid();
}
dt = time.time_ms() - st;
// end
printf("[%d]==>total: %d, cost: %d ms, aver: %f ms\n", index, n, dt, 1.0 * dt / n);
index++;
// begin @ id_generator.new_cookie
st = time.time_ms();
for (int i = 1 upto n)
{
id_generator.new_cookie();
}
dt = time.time_ms() - st;
//end
printf("[%d]==>total: %d, cost: %d ms, aver: %f ms\n", index, n, dt, 1.0 * dt / n);
}