关于循环主键的设计

需求

一笔业务要生成一个序号,序号长度为20位,序号的规则是固定的前缀(5位)+日期(yyyymmdd)(8位)+受理人序号(3位)+每日循环的序列号(4位)。例如
业务员001的业务编号
ORDER201801010010001
ORDER201801010010002
ORDER201801010010003
ORDER201801020010001
业务员002的业务编号
ORDER201801010020001
ORDER201801010020002
ORDER201801010020003
ORDER201801020020001

目前我想到的有两种实现方式,如下

方案1

采用redis来实现,将循环序列号前面的作为KEY,比如ORDER20180101001,ORDER20180101002,设置一个超时时间,目前是按天循环,则超时时间设置为24小时。value则是一个自增的数字。这样就可以满足需求了。

方案2

采用关系数据库来实现,列有seqprefix和nextval字段,seqprefix是主键。获取的时候查看seqprefix是否存在,不存在则插入 seqprefix=“XXX”,nextval=2. 如果有,则取出当前的nextval,并+1更新。

总结

以上两个都可以满足需求。方案1比较方便,不涉及数据表,方案2比较重一点。不知道业界还有没有其他的方法来实现。


沈子平
183 声望17 粉丝

慢慢积累,一切都不会太晚.