跳到主要内容

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);
}