算法讲解
简单版本实现
将一个int——32位,作为最终生成的唯一ID。
- 最高位不用为0
- 0-15这16位作为序列号
- 15-30这15位作为机器ID
int CreatSessionID()
{
int sessionid;
//每次选出最小的id
static int epch = 0;
static int lastId = 0;
if (epch >= pow(2,15)) {
ALOGE("ID run out of");
return -1;
}
if (lastId >= pow(2, 16)) {
epch++;
lastId = 0;
}
//类雪花算法实现,全局唯一自增ID生成,用一个int(32位)存储id,去掉最高位,可以生成pow(2,31)个唯一id
//后16位为序号位,17到31位为轮次位(15位)
sessionid= epch << 16 | lastId++;
return sessionid;
}