项目开发时,使用了两套数据库,开发环境和上线环境,数据库表中大多採用了自增主键,
比方:
id int unsigned primary key auto_increment,
但往往会碰到一些问题。比方:
开发环境中,使用爬虫抓取一些数据,建立索引。再把数据迁移到上线环境,会导致索引中的id和
上线环境数据库中id对不上,所以决定使用字符串作为主键。
那么问题来了,怎样生成唯一的序列号?
格式依照:yyyyMMdd+两位业务码+10位的自增序列。
比方20150101**99**0000000001。
思路:
获得日期非常easy;
业务码是调用服务传入的參数;
使用Redis来实现10位的自增序列的保存和自增,使用serial.number:{日期}的格式来保存某一天的自增序列的值;
主要代码例如以下:
public interface SerialNumberService {
/**
* 序列号自增序列
*/
String SERIAL_NUMBER = "serial.number:";
/**
* 依据两位业务码字符串,生成一个流水号,格式依照:
* yyyyMMdd{bizCode}{10位的自增序列号}
*
*@param bizCode
* 两位,00-99
*@return 20位的序列号
<