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

原创 2016年05月30日 22:22:20
--
-- 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


基于snowflake算法实现发号器

一、背景: 清分系统需要一套id生成器服务,保证分布式情况下全局唯一。 二、算法描述: 1、原始算法: (1)snowflake是twitter开源的分布式ID生成算法,其核心...
  • lianhuazy167
  • lianhuazy167
  • 2017年03月27日 08:12
  • 865

野谈系列之高性能可定制化分布式发号器

刘兵,花名玄靖,开源技术爱好者,高性能Redis中间件NRedis-Proxy作者,目前研究方向为java中间件,微服务等技术。 一、什么是分布式发号器 说起分布式发号器的前生今世,咱们应该感恩这...
  • u013970991
  • u013970991
  • 2017年04月06日 12:45
  • 3799

使用Redis实现高并发分布式序列号生成服务

序列号的构成 为建立良好的数据治理方案,作数据掌握、分析、统计、商业智能等用途,业务数据的编码制定通常都会遵循一定的规则,一般来讲,都会有自己的编码规则和自增序列构成。比如我们常见的身份证号、银...
  • DENGZHUYU
  • DENGZHUYU
  • 2015年06月02日 10:38
  • 2171

业务系统需要什么样的ID生成器

18 January 2015 ID 生成器在微博我们一直叫发号器,微博就是用这样的号来存储,而我微博里讨论的时候也都是以发号器为标签。它的主要目的确如平常大家理解的“为一个分布式系统的数据ob...
  • y87329396
  • y87329396
  • 2016年04月05日 22:56
  • 175

基于redis的分布式ID生成器

项目地址https://github.com/hengyunabc/redis-id-generator基于redis的分布式ID生成器。准备首先,要知道redis的EVAL,EVALSHA命令:ht...
  • hengyunabc
  • hengyunabc
  • 2015年03月13日 19:22
  • 24991

redis限速器设计(不使用lua脚本及事物)

公司有一个需求,需要集群中的机器每分钟发送固定个数请求到局域网以外的一台服务器,固定个数,是指集群中的所有机器发送的所有的请求加起来是一个固定的个数,这就需要一个分布式的限速器。 首先想到的就是使用...
  • whodarewin2005
  • whodarewin2005
  • 2014年09月21日 22:45
  • 1274

JAVA简单摇号器

给软件工程专业写的摇号器。 还没有写好。 学号还没有弄完。 暂定V.05 package 摇号; import java.awt.FlowLayout; import java.awt.eve...
  • wzt529
  • wzt529
  • 2016年09月08日 17:10
  • 988

初学Redis(3)——用Redis作为Mysql数据库的缓存

把Mysql结果集缓存到Redis的字符串或哈希结构中以后,我们面临一个新的问题,即如何为这些字符串或哈希命名,也就是如何确定它们的键。因为这些数据结构所对应的行都属于某个结果集,假如可以找到一种唯一...
  • qtyl1988
  • qtyl1988
  • 2014年09月24日 19:06
  • 46389

一号信令详细介绍

前言   随路信令方式(associafed signalling)通过电话通路传送信令,即信令信息和通话信息经过同一信道传送。模拟电话网通常采用ITU-T SS5的R1系统(北美)和R2系统(欧...
  • silent123go
  • silent123go
  • 2016年11月02日 19:37
  • 484

redis做缓存优势

1、 Redis简介 redis是Nosql数据库中使用较为广泛的非关系型内存数据库,redis内部是一个key-value存储系统。它支持存储的value类型相对更多,包括string(字符串)、...
  • lzl9421na
  • lzl9421na
  • 2017年08月03日 21:46
  • 1055
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:5行lua代码在redis上做发号器
举报原因:
原因补充:

(最多只允许输入30个字)