5行lua代码在redis上做发号器

--
-- User: Fangwei
-- Date: 16/5/26
-- Time: 19:28
-- To change this template use File | Settings | File Templates.
--

--生成ID的位数比较合理长度为52个bit,然后可以时间上有序的,包含项目和实例信息

-- 在redis客户端执行: redis-cli -h 127.0.0.1 -p 6379 EVAL "$(cat ticketID.lua)" 01 02
-- EVAL 后面的参数解释 "$(cat ticketID.lua)"是我们执行的lua脚本文件,
-- "2"是代表传入lua脚本的参数有两个KEY,
-- "01"表示projectID,我上面用4个bit 所以可以指定取值01至15
-- "02"表示实例ID,可以指定01-15

-- 更多关于redis的EVAL的说明,请参考:  http://redis.io/commands/EVAL

--更多详细的ID生成策略,建议参考大拿们的博客:http://weibo.com/p/1001603800404851831206


-- project id 占用 4个 bit
local projectId = KEYS[1]
-- instance id 占用 4个 bit
local instanceId = KEYS[2]
--sequence占用16个bit
local sequence = redis.call("INCR", "TICKET_ID") % 65536
--减去2016-05-08的时间戳,主要是因为位数有限,time占用28个bit
local time = redis.call("TIME")[1] - 1462636800

return time * 16777216 + projectId * 1048576 + instanceId * 65536 + sequence


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值