您的位置:首页 > 数据库 > Redis

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

2016-05-30 22:22 501 查看
--

-- 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: