关于循环主键的设计
需求
一笔业务要生成一个序号,序号长度为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比较重一点。不知道业界还有没有其他的方法来实现。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。