代码拉取完成,页面将自动刷新
-- need redis 3.2+
redis.replicate_commands();
local prefix = '__idgenerator_';
local partitionCount = 4096;
local step = 3;
local startStep = 2;
local tag = KEYS[1];
-- if user do not pass shardId, default partition is 0.
local partition
if KEYS[2] == nil then
partition = 0;
else
partition = KEYS[2] % partitionCount;
end
local now = redis.call('TIME');
local miliSecondKey = prefix .. tag ..'_' .. partition .. '_' .. now[1] .. '_' .. math.floor(now[2]/1000);
local count;
repeat
count = tonumber(redis.call('INCRBY', miliSecondKey, step));
if count > (1024 - step) then
now = redis.call('TIME');
miliSecondKey = prefix .. tag ..'_' .. partition .. '_' .. now[1] .. '_' .. math.floor(now[2]/1000);
end
until count <= (1024 - step)
if count == step then
redis.call('PEXPIRE', miliSecondKey, 5);
end
-- second, microSecond, partition, seq
return {tonumber(now[1]), tonumber(now[2]), partition, count + startStep}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。