码迷,mamicode.com
首页 > 其他好文 > 详细

lua学习笔记之-----5行代码完成ID发号器

时间:2016-05-31 08:59:51      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

版权归作者所有,任何形式转载请联系作者。

 

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

-- 在redis客户端执行: redis-cli -h 127.0.0.1 -p 6379 EVAL "$(cat ticketID.lua)" 2 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

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

 

lua学习笔记之-----5行代码完成ID发号器

标签:

原文地址:http://www.cnblogs.com/victor-fang/p/5544661.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!