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
-- 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
相关文章推荐
- 在homestead php7的ubuntu环境中安装 php redis扩展的方法
- 底层实现-intset 整数集合
- 浅析Redis复制
- Redis安装之Windows
- NoSQL之Redis---下载与安装
- Redis 复制
- NoSql之Redis数据类型
- 安装redis和php的redis扩展
- 一致性Hash算法在Redis分布式中的使用
- Redis 代理服务Twemproxy
- 使用Spring Session和Redis管理session
- Redis Windows版安装及整合Spring
- nginx+tomcat+redis集群环境搭建
- Redis和MongoDB的关系
- Linux安装Redis
- Redis使用优化技巧(java)
- 基于Redis Sentinel的Redis集群(主从&Sharding)高可用方案
- redis之(十六)redis的cluster集群环境的搭建,转载
- windows下使用Redis存储
- centos 6.x redis设置启动