一种顺序机器号的生成方案

       在某些场景,需要一种唯一标识主机的编号,比如主机A是1,主机B是2,主机C是3等。实现的方法应该有许多中,本文介绍的是一种依赖数据库的顺序数字生成方案。

生成的机器号具有具有下面几个特点

1:从1~n的顺序数字。

2:每个主机的机器号不重复。

3:不再使用的机器号可以被复用。

本方案基于mysql实现,需要在数据库中创建worker数据表,此表用于存储workerId。下面是实现的流程图。

 

 

流程说明

    workerId从1开始,连续递增,最大值取决于自己系统的需要。获取workerId的过程就是从数字1开始在数据库中循环查找一个未被使用的workerId。

1)在数据库中查询workerId是否存在,如果不存在就表示此workerId还未被使用,在数据库中为此workerId创建一条记录。

2)如果workerId已经在数据库中存在记录,说明可能已经被其它主机使用,需要进一步检查有效时间,如果已经过期,就可以复用。

3)最后,要是workerId没有过期,则不能使用,需要尝试下一个。

下面是创建worker表的sql脚本

CREATE TABLE `worker` (

  `id` int(11) NOT NULL,

  `active_time` datetime NOT NULL COMMENT '此worker最后一次活跃时间',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

活跃时间的维护

active_time记录worker的最后活跃时间,一个活跃的workerId不能用于其它worker。因为有了active_time,workerId不再使用时,可以不用主动删除,(当前时间-active_time)大于过期时间(比如使用10分钟)时,workerId就被视为无效了,可以被重新复用。

在系统中,需要有一个定时任务,对active_time定时更新。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值